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实现统计代码行的方法分析
Jul 12 Python
Python实现注册登录系统
Aug 08 Python
Python生成8位随机字符串的方法分析
Dec 05 Python
Python模块搜索路径代码详解
Jan 29 Python
python文本数据相似度的度量
Mar 12 Python
Django读取Mysql数据并显示在前端的实例
May 27 Python
python中多层嵌套列表的拆分方法
Jul 02 Python
python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据)
Aug 28 Python
keras中模型训练class_weight,sample_weight区别说明
May 23 Python
PyCharm MySQL可视化Database配置过程图解
Jun 09 Python
Django使用channels + websocket打造在线聊天室
May 20 Python
Django集成富文本编辑器summernote的实现步骤
May 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
Windows下PHP5和Apache的安装与配置
2006/09/05 PHP
浅析php学习的路线图
2013/07/10 PHP
PHP抓屏函数实现屏幕快照代码分享
2014/01/02 PHP
PHP 动态生成静态HTML页面示例代码
2014/01/15 PHP
PHP实现简单实用的验证码类
2015/07/29 PHP
PHP+redis实现添加处理投票的方法
2015/11/14 PHP
php mailer类调用远程SMTP服务器发送邮件实现方法
2016/03/04 PHP
php实现异步将远程链接上内容(图片或内容)写到本地的方法
2016/11/30 PHP
InnerHtml和InnerText的区别分析
2009/03/13 Javascript
浅析jQuery中调用ajax方法时在不同浏览器中遇到的问题
2014/06/11 Javascript
js网页滚动条滚动事件实例分析
2015/05/05 Javascript
jQuery实现的五子棋游戏实例
2015/06/13 Javascript
微信小程序(应用号)简单实例应用及实例详解
2016/09/26 Javascript
微信小程序开发实战教程之手势解锁
2016/11/18 Javascript
vue数据双向绑定原理解析(get & set)
2017/03/08 Javascript
Node.js中 __dirname 的使用介绍
2017/06/19 Javascript
详解webpack import()动态加载模块踩坑
2018/07/17 Javascript
koa+mongoose实现简单增删改查接口的示例代码
2019/05/13 Javascript
[36:13]Mineski vs iG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python实现检测服务器是否可以ping通的2种方法
2015/01/01 Python
Python contextlib模块使用示例
2015/02/18 Python
在Python的gevent框架下执行异步的Solr查询的教程
2015/04/16 Python
python Selenium爬取内容并存储至MySQL数据库的实现代码
2017/03/16 Python
python模仿网页版微信发送消息功能
2018/02/24 Python
Python实现判断一行代码是否为注释的方法
2018/05/23 Python
vscode+PyQt5安装详解步骤
2020/08/12 Python
纯css3实现图片翻牌特效
2015/03/10 HTML / CSS
巴西男士胡须和头发护理产品商店:Beard
2017/11/13 全球购物
Perfume’s Club法国站:购买香水和化妆品
2019/05/02 全球购物
实习老师个人总结的自我评价
2013/09/28 职场文书
刚毕业大学生自荐信范文
2014/02/20 职场文书
2015年度护士个人工作总结
2015/04/09 职场文书
法定代表人资格证明书
2015/06/18 职场文书
2016年元旦致辞
2015/08/01 职场文书
课程设计感想范文
2015/08/11 职场文书
领导莅临指导欢迎词
2015/09/30 职场文书