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写的PHPMyAdmin暴力破解工具代码
Aug 06 Python
举例详解Python中的split()函数的使用方法
Apr 07 Python
python实现JAVA源代码从ANSI到UTF-8的批量转换方法
Aug 10 Python
python放大图片和画方格实现算法
Mar 30 Python
实用自动化运维Python脚本分享
Jun 04 Python
pygame游戏之旅 添加icon和bgm音效的方法
Nov 21 Python
Python range、enumerate和zip函数用法详解
Sep 11 Python
pytorch中 gpu与gpu、gpu与cpu 在load时相互转化操作
May 25 Python
python实现斗地主分牌洗牌
Jun 22 Python
详解python的super()的作用和原理
Oct 29 Python
python 实现一个简单的线性回归案例
Dec 17 Python
python常见的占位符总结及用法
Jul 02 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
投票管理程序
2006/10/09 PHP
判断是否为指定长度内字符串的php函数
2010/02/16 PHP
PHP使用pcntl_fork实现多进程下载图片的方法
2014/12/16 PHP
PHP中ltrim()函数的用法与实例讲解
2019/03/28 PHP
JavaScript 对任意元素,自定义右键菜单的实现方法
2013/05/08 Javascript
JQuery each打印JS对象的方法
2013/11/13 Javascript
Jquery解析json数据详解
2013/12/26 Javascript
jQuery拖动元素并对元素进行重新排序
2015/12/30 Javascript
jQuery的内容过滤选择器学习教程
2016/04/18 Javascript
JavaScript中setter和getter方法介绍
2016/07/11 Javascript
使用React实现轮播效果组件示例代码
2016/09/05 Javascript
jquery+ajax实现省市区三级联动效果简单示例
2017/01/04 Javascript
AngularJS Toaster使用详解
2017/02/24 Javascript
js 客户端打印html 并且去掉页眉、页脚的实例
2017/11/03 Javascript
node.js多个异步过程中判断执行是否完成的解决方案
2017/12/10 Javascript
详解Ant Design of React的安装和使用方法
2018/12/27 Javascript
JS实现TITLE悬停长久显示效果完整示例
2020/02/11 Javascript
js实现双人五子棋小游戏
2020/05/28 Javascript
解决elementui表格操作列自适应列宽
2020/12/28 Javascript
[01:53]DOTA2超级联赛专访Zhou 五年职业青春成长
2013/05/29 DOTA
python中的五种异常处理机制介绍
2014/09/02 Python
Python实现注册登录系统
2017/08/08 Python
python中调试或排错的五种方法示例
2019/09/12 Python
Python之指数与E记法的区别详解
2019/11/21 Python
pytorch 修改预训练model实例
2020/01/18 Python
Python numpy多维数组实现原理详解
2020/03/10 Python
详解pandas获取Dataframe元素值的几种方法
2020/06/14 Python
详解Python直接赋值,深拷贝和浅拷贝
2020/07/09 Python
马来西亚在线时尚女装商店:KEI MAG
2017/09/28 全球购物
英国豪华家具和家居用品购物网站:Teddy Beau
2020/10/12 全球购物
怎样声明一个匿名的内部类
2016/06/01 面试题
买卖协议书范本
2014/04/21 职场文书
考试诚信承诺书
2014/05/23 职场文书
小学运动会开幕词
2015/01/28 职场文书
医院党建工作总结2015
2015/05/26 职场文书
2016中秋节月饼促销广告语
2016/01/28 职场文书