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 相关文章推荐
在Python3中使用asyncio库进行快速数据抓取的教程
Apr 02 Python
Python图算法实例分析
Aug 13 Python
Python远程视频监控程序的实例代码
May 05 Python
Python统计分析模块statistics用法示例
Sep 06 Python
Python使用tkinter模块实现推箱子游戏
Oct 08 Python
numpy.array 操作使用简单总结
Nov 08 Python
Python 剪绳子的多种思路实现(动态规划和贪心)
Feb 24 Python
使用python实现多维数据降维操作
Feb 24 Python
python filecmp.dircmp实现递归比对两个目录的方法
May 22 Python
Python实现Appium端口检测与释放的实现
Dec 31 Python
python解包用法详解
Feb 17 Python
tensorflow2.0教程之Keras快速入门
Feb 20 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
短波的认识
2021/03/01 无线电
PHP 操作文件的一些FAQ总结
2009/02/12 PHP
php 注释规范
2012/03/29 PHP
zend Framework中的Layout(模块化得布局)详解
2013/06/28 PHP
PHP中的静态变量及static静态变量使用详解
2015/11/05 PHP
Joomla调用系统自带编辑器的实现方法
2016/05/05 PHP
简单的自定义php模板引擎
2016/08/26 PHP
Jquery刷新页面背景图片随机变换的实现方法
2013/03/15 Javascript
显示今天的日期js代码(阳历和农历)
2014/09/30 Javascript
jQuery版本升级踩坑大全
2016/01/12 Javascript
原生js中ajax访问的实例详解
2017/09/19 Javascript
three.js实现3D模型展示的示例代码
2017/12/31 Javascript
微信小程序调用天气接口并且渲染在页面过程详解
2019/06/24 Javascript
layui.tree组件的使用以及搜索节点功能的实现
2019/09/26 Javascript
Javascript实现关闭广告效果
2021/01/29 Javascript
python导入csv文件出现SyntaxError问题分析
2017/12/15 Python
Python3 XML 获取雅虎天气的实现方法
2018/02/01 Python
分析python动态规划的递归、非递归实现
2018/03/04 Python
使用python PIL库实现简单验证码的去噪方法步骤
2019/05/10 Python
使用matlab或python将txt文件转为excel表格
2019/11/01 Python
python 画3维轨迹图并进行比较的实例
2019/12/06 Python
Python基本类型的连接组合和互相转换方式(13种)
2019/12/16 Python
Python 创建TCP服务器的方法
2020/07/28 Python
西班牙著名的珠宝首饰品牌:P D PAOLA
2018/09/15 全球购物
美国精油公司:Plant Therapy
2019/05/17 全球购物
速比涛英国官网:Speedo英国
2019/07/15 全球购物
跟单文员岗位职责
2014/01/03 职场文书
售后服务经理岗位职责
2014/02/25 职场文书
《小小竹排画中游》教学反思
2014/02/26 职场文书
公司股权转让协议书
2014/04/12 职场文书
学校标语大全
2014/06/19 职场文书
学术研讨会欢迎词
2015/01/26 职场文书
幼儿园大班教师评语
2019/06/21 职场文书
如何用RabbitMQ和Swoole实现一个异步任务系统
2021/05/29 PHP
解析MySQL binlog
2021/06/11 MySQL
Java异常处理try catch的基本用法
2021/12/06 Java/Android