Python爬取365好书中小说代码实例


Posted in Python onFebruary 28, 2020

要转载的小伙伴转载后请注明转载的地址

需要用到的库

  • from bs4 import BeautifulSoup
  • import requests
  • import time

365好书链接:http://www.365haoshu.com/ 爬取《我以月夜寄相思》小说

首页进入到目录:http://www.365haoshu.com/Book/Chapter/List.aspx?NovelId=3026

获取小说的每个章节的名称和章节链接

打开浏览器的开发者工具,查找一个章节:如下图,找到第一章的名称和href(也就是第一章节内容页面的链接),开始写代码

Python爬取365好书中小说代码实例

from bs4 import BeautifulSoup 
import requests
import time
# 分别导入time、requests、BeautifulSoup库

url = 'http://www.365haoshu.com/Book/Chapter/'
# 链接地址url,这儿url章节链接没全写出来是因为下面获取章节链接时要用到这些url
req = requests.get(url+'List.aspx?NovelId=0326')
# 打开章节页面,
req_bf = BeautifulSoup(req.text,"html.parser")
print(req_bf)
# 将打开的页面以text打印出来
div = req_bf.find_all('div',class_='user-catalog-ul-li')
# 分析页面,所需要的章节名和章节链接是在div标签,属性class为user-catalog-ul-li下
# 找到这个下的内容,并打印
s = []
for d in div:
  s.append(d.find('a'))
print(s)
# 获取div下面的a标签下的内容
names=[] # 存储章节名
hrefs=[] # 存储章节链接
for i in s:
  names.append(i.find('span').string)
  hrefs.append(url + i.get('href'))
# 将所有的章节和章节链接存入的列表中
观察href后的链接和打开章节内容页面的链接是不完全的相同的, 所以要拼接使得浏览器能直接打开章节内容

获取到链接和章节名后打开一个章节获取文本内容;

和获取章节名方法一致,一步一步查找到内容的位置

txt = requests.get(hrefs[0])
div_bf = BeautifulSoup(txt.text,'html.parser')
div = div_bf.find_all('div',class_='container user-reading-online pos-rel')
#print(div)
ps = BeautifulSoup(str(div),"html.parser")
p=ps.find_all('p',class_='p-content')
print(p)
txt=[]
for i in p:
  txt.append(i.string+'\n')
print(txt)

获取单一章节完成

接下来整理代码,获取整个小说的内容,代码如下:

# --*-- coding=utf-8 --*--

from bs4 import BeautifulSoup
import requests
import time


class spiderstory(object):

  def __init__(self): # 初始化
    self.url = 'http://www.365haoshu.com/Book/Chapter/'
    self.names = [] # 存放章节名
    self.hrefs = [] # 存放章节链接

  def get_urlAndName(self):
    '''获取章节名和章节链接'''
    req = requests.get(url=self.url+'List.aspx?NovelId=0326') # 获取章节目录页面
    time.sleep(1) # 等待1秒
    div_bf = BeautifulSoup(req.text,"html.parser") # req后面跟text和html都行
    div = div_bf.find_all('div', class_='user-catalog-ul-li') # 查找内容,标签为div,属性为class='user-catalog-ul-li'
    a_bf = BeautifulSoup(str(div))
    a = a_bf.find_all('a') # # 查找内容,标签为a
    for i in a:
      self.names.append(i.find('span').string) # 获取内容直接string就行
      self.hrefs.append(self.url + i.get('href')) # 获取链接

  def get_text(self,url):
    '''获取章节内容'''
    req = requests.get(url=url)
    div_bf = BeautifulSoup(req.text,"html.parser")
    div = div_bf.find_all('div', class_='container user-reading-online pos-rel') # 查找内容
    ps = BeautifulSoup(str(div), "html.parser")
    p = ps.find_all('p', class_='p-content')
    text = []
    for each in p:
      text.append(each.string)
    print(text)

    return text # 将获得的内容返回

  def writer(self, name, path, text):
    '''写入text文档中'''
    with open(path, 'a', encoding='utf-8') as f:
      f.write(name + '\n')
      f.writelines(text)
      f.write('\n\n')
if __name__ == "__main__": # 运行入口
  s = spiderstory()
  s.get_urlAndName()
  le = len(s.names)
  for i in range(le): # 利用for循环获得所有的内容
    name = s.names[i]
    text = str(s.get_text(s.hrefs[i]))
    s.writer(name,"我以月夜寄相思.txt",text)
  print('下载完毕!!!')

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python在多玩图片上下载妹子图的实现代码
Aug 13 Python
线程和进程的区别及Python代码实例
Feb 04 Python
Python 私有函数的实例详解
Sep 11 Python
python实现mysql的读写分离及负载均衡
Feb 04 Python
python使用folium库绘制地图点击框
Sep 21 Python
使用python对excle和json互相转换的示例
Oct 23 Python
python实现截取屏幕保存文件,删除N天前截图的例子
Aug 27 Python
python实现五子棋游戏(pygame版)
Jan 19 Python
如何在VSCode下使用Jupyter的教程详解
Jul 13 Python
Django如何实现密码错误报错提醒
Sep 04 Python
Django跨域请求原理及实现代码
Nov 14 Python
Python利用zhdate模块实现农历日期处理
Mar 31 Python
Python反爬虫伪装浏览器进行爬虫
Feb 28 #Python
使用wxpy实现自动发送微信消息功能
Feb 28 #Python
解决ROC曲线画出来只有一个点的问题
Feb 28 #Python
Python编程快速上手——正则表达式查找功能案例分析
Feb 28 #Python
利用python画出AUC曲线的实例
Feb 28 #Python
Python编程快速上手——选择性拷贝操作案例分析
Feb 28 #Python
AUC计算方法与Python实现代码
Feb 28 #Python
You might like
php adodb连接带密码access数据库实例,测试成功
2008/05/14 PHP
一步一步学习PHP(2)――PHP类型
2010/02/15 PHP
php中的一些数组排序方法分享
2012/07/20 PHP
浅谈PHP强制类型转换,慎用!
2013/06/06 PHP
PHP开发工具ZendStudio下Xdebug工具使用说明详解
2013/11/11 PHP
PHP使用ob_start生成html页面的方法
2014/11/07 PHP
PHP数据的提交与过滤基本操作实例详解
2016/11/11 PHP
Javascript实现仿WebQQ界面的“浮云”兼容 IE7以上版本及FF
2011/04/27 Javascript
详谈JavaScript 匿名函数及闭包
2014/11/14 Javascript
node.js中的console.error方法使用说明
2014/12/10 Javascript
jquery.map()方法的使用详解
2015/07/09 Javascript
JavaScript中的事件委托及好处
2016/07/12 Javascript
JS简单去除数组中重复项的方法
2016/09/13 Javascript
DropDownList实现可输入可选择(两种版本可选)
2016/12/07 Javascript
jQuery实现表格元素动态创建功能
2017/01/09 Javascript
jQuery实现别踩白块儿网页版小游戏
2017/01/18 Javascript
w3c编程挑战_初级脚本算法实战篇
2017/06/23 Javascript
深入理解Vue官方文档梳理之全局API
2017/11/22 Javascript
angular 内存溢出的问题解决
2018/07/12 Javascript
nodejs实现一个word文档解析器思路详解
2018/08/14 NodeJs
微信小程序实现页面分享onShareAppMessage
2019/08/12 Javascript
通过实例解析chrome如何在mac环境中安装vue-devtools插件
2020/07/10 Javascript
Python列表append和+的区别浅析
2015/02/02 Python
图解Python变量与赋值
2018/04/03 Python
Tensorflow读取并输出已保存模型的权重数值方式
2020/01/04 Python
利用Vscode进行Python开发环境配置的步骤
2020/06/22 Python
两道JAVA笔试题
2016/09/14 面试题
应届生体育教师自荐信
2013/10/03 职场文书
秋季运动会表扬稿
2014/01/16 职场文书
电脑饰品店的创业计划书
2014/01/21 职场文书
2014年综治宣传月活动总结
2014/04/28 职场文书
文明城市创建标语
2014/06/16 职场文书
销售辞职信范文
2015/03/02 职场文书
2017元旦、春节期间廉洁自律承诺书
2016/03/25 职场文书
Python中的变量与常量
2021/11/11 Python
springboot入门 之profile设置方式
2022/04/04 Java/Android