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中for循环详解
Jan 17 Python
在Python的Django框架中创建语言文件
Jul 27 Python
Python实现爬虫抓取与读写、追加到excel文件操作示例
Jun 27 Python
Django实现支付宝付款和微信支付的示例代码
Jul 25 Python
Python+selenium 获取浏览器窗口坐标、句柄的方法
Oct 14 Python
浅谈python脚本设置运行参数的方法
Dec 03 Python
Django web框架使用url path name详解
Apr 29 Python
python交易记录链的实现过程详解
Jul 03 Python
python实现动态数组的示例代码
Jul 15 Python
python中用logging实现日志滚动和过期日志删除功能
Aug 20 Python
django queryset 去重 .distinct()说明
May 19 Python
python3.9实现pyinstaller打包python文件成exe
Dec 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
PHP 创建标签云函数代码
2010/05/26 PHP
php更改目录及子目录下所有的文件后缀的代码
2010/09/24 PHP
PHP分页效率终结版(推荐)
2013/07/01 PHP
php获取表单中多个同名input元素的值
2014/03/20 PHP
初识通用数据库操作类――前端easyui-datagrid,form(php)
2015/07/31 PHP
PHP的APC模块实现上传进度条
2015/10/27 PHP
PHP实现的Redis多库选择功能单例类
2017/07/27 PHP
js中的hasOwnProperty和isPrototypeOf方法使用实例
2014/06/06 Javascript
.NET微信公众号开发之创建自定义菜单
2015/07/16 Javascript
vue多级多选菜单组件开发
2020/09/08 Javascript
AngularJS中directive指令使用之事件绑定与指令交互用法示例
2016/11/22 Javascript
jQuery 判断元素整理汇总
2017/02/28 Javascript
vue发送ajax请求详解
2018/10/09 Javascript
微信小程序手动添加收货地址省市区联动
2020/05/18 Javascript
[02:08]我的刀塔不可能这么可爱 胡晓桃_1
2014/06/20 DOTA
[59:15]EG vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.26
2018/08/29 DOTA
Python实现将罗马数字转换成普通阿拉伯数字的方法
2017/04/19 Python
python之文件读取一行一行的方法
2018/07/12 Python
python图形工具turtle绘制国际象棋棋盘
2019/05/23 Python
Pandas库之DataFrame使用的学习笔记
2019/06/21 Python
Django中Middleware中的函数详解
2019/07/18 Python
简单了解Python读取大文件代码实例
2019/12/18 Python
如何在mac环境中用python处理protobuf
2019/12/25 Python
python标准库OS模块函数列表与实例全解
2020/03/10 Python
css3的transition效果和transfor效果示例介绍
2013/10/30 HTML / CSS
排序都有哪几种方法?请列举。用JAVA实现一个快速排序
2014/02/16 面试题
《回乡偶书》教学反思
2014/04/12 职场文书
优秀团员自我评价范文
2014/04/23 职场文书
法律专业自荐信
2014/06/03 职场文书
企业与个人合作经营协议书
2014/11/01 职场文书
先进个人材料怎么写
2014/12/30 职场文书
css filter和getUserMedia的联合使用
2022/02/24 HTML / CSS
yolov5返回坐标的方法实例
2022/03/17 Python
Redis入门基础常用操作命令整理
2022/06/01 Redis
Nginx如何配置多个服务域名解析共用80端口详解
2022/09/23 Servers
Navicat Premium自定义 sql 标签的创建方式
2022/09/23 数据库