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数据结构与算法之链表定义与用法实例详解【单链表、循环链表】
Sep 28 Python
利用python解决mysql视图导入导出依赖的问题
Dec 17 Python
Linux CentOS7下安装python3 的方法
Jan 21 Python
Numpy array数据的增、删、改、查实例
Jun 04 Python
浅谈python函数调用返回两个或多个变量的方法
Jan 23 Python
python跳出双层for循环的解决方法
Jun 24 Python
Python队列RabbitMQ 使用方法实例记录
Aug 05 Python
基于TensorFlow常量、序列以及随机值生成实例
Jan 04 Python
使用keras和tensorflow保存为可部署的pb格式
May 25 Python
Opencv中cv2.floodFill算法的使用
Jun 18 Python
Flask response响应的具体使用
Jul 15 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新建文件自动编号的思路与实现
2011/06/27 PHP
PHP调用.NET的WebService 简单实例
2015/03/27 PHP
php实现用手机关闭计算机(电脑)的方法
2015/04/22 PHP
PHP7 mongoDB扩展使用的方法分享
2019/05/02 PHP
Laravel 之url参数,获取路由参数的例子
2019/10/21 PHP
JQuery为textarea添加maxlength属性的代码
2010/04/07 Javascript
10个基于jQuery或JavaScript的WYSIWYG 编辑器整理
2010/05/06 Javascript
javascript获取当前日期时间及其它操作函数
2011/01/11 Javascript
JavaScript也谈内存优化
2014/06/06 Javascript
js调试工具console.log()方法查看js代码的执行情况
2014/08/08 Javascript
jquery不常用方法汇总
2015/07/26 Javascript
iScroll.js 使用方法参考
2016/05/16 Javascript
Laravel中常见的错误与解决方法小结
2016/08/30 Javascript
js实现点击切换checkbox背景图片的简单实例
2017/05/08 Javascript
Vue组件化开发之通用型弹出框的实现
2020/02/28 Javascript
基于原生js实现判断元素是否有指定class名
2020/07/11 Javascript
浅谈鸿蒙 JavaScript GUI 技术栈
2020/09/17 Javascript
Python实现SVN的目录周期性备份实例
2015/07/17 Python
python文件的md5加密方法
2016/04/06 Python
Python中的迭代器与生成器高级用法解析
2016/06/28 Python
sublime text 3配置使用python操作方法
2017/06/11 Python
TensorFlow如何实现反向传播
2018/02/06 Python
python3爬取淘宝信息代码分析
2018/02/10 Python
python向字符串中添加元素的实例方法
2019/06/28 Python
如何用Python做一个微信机器人自动拉群
2019/07/03 Python
python plotly绘制直方图实例详解
2019/07/22 Python
Python 带星号(* 或 **)的函数参数详解
2021/02/23 Python
3种方式实现瀑布流布局小结
2019/09/05 HTML / CSS
巴西美妆购物网站:Kutiz Beauté
2019/03/13 全球购物
公司财务工作总结的自我评价
2013/11/23 职场文书
干部考察材料范文
2014/12/24 职场文书
业务员年终工作总结2015
2015/05/28 职场文书
煤矿隐患排查制度
2015/08/05 职场文书
《我要的是葫芦》教学反思
2016/02/18 职场文书
解决IDEA翻译插件Translation报错更新TTK失败不能使用
2022/04/24 Python
使用Mysql计算地址的经纬度距离和实时位置信息
2022/04/29 MySQL