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安装使用命令行交互模块pexpect的基础教程
May 12 Python
python自动裁剪图像代码分享
Nov 25 Python
Python3使用pandas模块读写excel操作示例
Jul 03 Python
python2与python3共存问题的解决方法
Sep 18 Python
python实现在多维数组中挑选符合条件的全部元素
Nov 26 Python
Python嵌套函数,作用域与偏函数用法实例分析
Dec 26 Python
python 实现字符串下标的输出功能
Feb 13 Python
Python+OpenCV实现图像的全景拼接
Mar 05 Python
详解django使用include无法跳转的解决方法
Mar 19 Python
Python Tornado实现WEB服务器Socket服务器共存并实现交互的方法
May 26 Python
Python利用matplotlib绘制折线图的新手教程
Nov 05 Python
matplotlib绘制正余弦曲线图的实现
Feb 22 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
这东西价格,可以买几台TECSUN S-2000
2021/03/02 无线电
PHP6连接SQLServer2005的三部曲
2016/04/15 PHP
ThinkPHP3.2框架使用addAll()批量插入数据的方法
2017/03/16 PHP
Yii2框架可逆加密简单实现方法
2017/08/25 PHP
PHP面向对象程序设计中的self、static、parent关键字用法分析
2019/08/14 PHP
客户端脚本中常常出现的一些问题和调试技巧
2007/01/09 Javascript
5 cool javascript apps
2007/03/24 Javascript
JavaScript中的History历史对象
2008/01/16 Javascript
Firefox中beforeunload事件的实现缺陷浅析
2012/05/03 Javascript
如何判断鼠标是否在DIV的区域内
2013/11/13 Javascript
jQuery标签替换函数replaceWith()的使用例子
2014/08/28 Javascript
JavaScript获取鼠标移动时的坐标(兼容IE8、chome谷歌、Firefox)
2014/09/13 Javascript
jQuery插件Elastislide实现响应式的焦点图无缝滚动切换特效
2015/04/12 Javascript
Javascript中replace()小结
2015/09/30 Javascript
基于JavaScript获取鼠标位置的各种方法
2015/12/16 Javascript
javascript学习笔记_浅谈基础语法,类型,变量
2016/09/19 Javascript
JavaScript字符集编码与解码详谈
2017/02/02 Javascript
微信小程序本作用域下调用全局JS详解及实例
2017/02/22 Javascript
ES6 Generator函数的应用实例分析
2019/06/26 Javascript
JS实现可视化音频效果的实例代码
2020/01/16 Javascript
vue实现多个echarts根据屏幕大小变化而变化实例
2020/07/19 Javascript
详细介绍Python语言中的按位运算符
2013/11/26 Python
Tornado服务器中绑定域名、虚拟主机的方法
2014/08/22 Python
Python中unittest用法实例
2014/09/25 Python
python中sleep函数用法实例分析
2015/04/29 Python
python制作小说爬虫实录
2017/08/14 Python
Django实现whoosh搜索引擎使用jieba分词
2020/04/08 Python
解决Alexnet训练模型在每个epoch中准确率和loss都会一升一降问题
2020/06/17 Python
戴森美国官网:Dyson美国
2016/09/11 全球购物
银行简历自我评价
2014/02/11 职场文书
初二学习计划书范文
2014/04/27 职场文书
努力学习保证书
2015/02/26 职场文书
统招统分证明
2015/06/23 职场文书
我的中国梦主题班会
2015/08/14 职场文书
汉语拼音教学反思
2016/02/22 职场文书
如何用RabbitMQ和Swoole实现一个异步任务系统
2021/05/29 PHP