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操作CouchDB的方法
Oct 08 Python
python获取元素在数组中索引号的方法
Jul 15 Python
Python获取央视节目单的实现代码
Jul 25 Python
Python中文分词实现方法(安装pymmseg)
Jun 14 Python
python中requests使用代理proxies方法介绍
Oct 25 Python
Python文件的读写和异常代码示例
Oct 31 Python
python os.listdir按文件存取时间顺序列出目录的实例
Oct 21 Python
python读取TXT每行,并存到LIST中的方法
Oct 26 Python
python3+selenium自动化测试框架详解
Mar 17 Python
python实现可变变量名方法详解
Jul 01 Python
Python魔法方法 容器部方法详解
Jan 02 Python
利用python实现.dcm格式图像转为.jpg格式
Jan 13 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
再说下636单管机
2021/03/02 无线电
TP5框架实现上传多张图片的方法分析
2020/03/29 PHP
php字符串函数 str类常见用法示例
2020/05/15 PHP
安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题
2020/08/26 PHP
js获取当前日期代码适用于网页头部
2013/06/27 Javascript
ie与ff下的event事件使用介绍
2013/11/25 Javascript
从零学jquery之如何使用回调函数
2014/05/16 Javascript
JavaScript控制网页平滑滚动到指定元素位置的方法
2015/04/17 Javascript
jQuery实现可用于博客的动态滑动菜单完整实例
2015/09/17 Javascript
深入解析JavaScript中的数字对象与字符串对象
2015/10/21 Javascript
JSON+Jquery省市区三级联动
2016/01/13 Javascript
JS实现HTML表格排序功能
2016/08/05 Javascript
JS组件系列之MVVM组件构建自己的Vue组件
2017/04/28 Javascript
Node.js使用gm拼装sprite图片
2017/07/04 Javascript
小程序点赞收藏功能的实现代码示例
2018/09/07 Javascript
vue-cli 脚手架基于Nightwatch的端到端测试环境的过程
2018/09/30 Javascript
实例讲解v-if和v-show的区别
2019/01/31 Javascript
jquery中attr、prop、data区别与用法分析
2019/09/25 jQuery
jQuery实现聊天对话框
2020/02/08 jQuery
[01:34]2014DOTA2 TI预选赛预选赛 选手比赛房大揭秘!
2014/05/20 DOTA
[43:03]LGD vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
python super用法及原理详解
2020/01/20 Python
Jupyter notebook如何修改平台字体
2020/05/13 Python
Python接收手机短信的代码整理
2020/08/02 Python
css3隔行变换色实现示例
2014/02/19 HTML / CSS
Lookfantastic香港官网:英国知名美妆购物网站
2018/06/19 全球购物
墨西哥购物网站:Elektra
2020/01/21 全球购物
机械专业毕业生推荐信范文
2013/11/25 职场文书
运动会解说词50字
2014/01/18 职场文书
旅游节目策划方案
2014/05/26 职场文书
社区个人对照检查材料(群众路线)
2014/09/26 职场文书
上课睡觉检讨书300字
2014/11/18 职场文书
2015年万圣节活动总结
2015/03/24 职场文书
摘录式读书笔记
2015/07/01 职场文书
python中的mysql数据库LIKE操作符详解
2021/07/01 MySQL
Win7/8.1用户可以免费升级到Windows 11系统吗?
2021/11/21 数码科技