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采用socket模拟TCP通讯的实现方法
Nov 19 Python
Python的类实例属性访问规则探讨
Jan 30 Python
python实现的DES加密算法和3DES加密算法实例
Jun 03 Python
简单了解Python下用于监视文件系统的pyinotify包
Nov 13 Python
python获取当前运行函数名称的方法实例代码
Apr 06 Python
Python装饰器实现几类验证功能做法实例
May 18 Python
浅谈django rest jwt vue 跨域问题
Oct 26 Python
python使用BeautifulSoup与正则表达式爬取时光网不同地区top100电影并对比
Apr 15 Python
用Pytorch训练CNN(数据集MNIST,使用GPU的方法)
Aug 19 Python
python3使用GUI统计代码量
Sep 18 Python
在vscode中启动conda虚拟环境的思路详解
Dec 25 Python
python实现三种随机请求头方式
Jan 05 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 获取MySQL数据库里所有表的实现代码
2011/07/13 PHP
php无限分类使用concat如何实现
2015/11/05 PHP
Linux基于php-fpm模式的lamp搭建phpmyadmin的方法
2018/10/25 PHP
Javascript 日期处理之时区问题
2009/10/08 Javascript
jQuery 扩展对input的一些操作方法
2009/10/30 Javascript
Dom 学习总结以及实例的使用介绍
2013/04/24 Javascript
js调用后台servlet方法实例
2013/06/09 Javascript
JavaScript实现带箭头标识的多级下拉菜单效果
2015/08/27 Javascript
jQuery实现简单的文件上传进度条效果
2020/03/26 Javascript
AngularJS表单和输入验证实例
2016/11/02 Javascript
bootstrap fileinput完整实例分享
2016/11/08 Javascript
使用node.js中的Buffer类处理二进制数据的方法
2016/11/26 Javascript
Vue.js render方法使用详解
2017/04/05 Javascript
微信小程序 判断手机号的实现代码
2017/04/19 Javascript
前端构建工具之gulp的配置与搭建详解
2017/06/12 Javascript
用javascript获取任意颜色的更亮或更暗颜色值示例代码
2017/07/21 Javascript
nodejs高大上的部署方式(PM2)
2018/09/11 NodeJs
koa源码中promise的解读
2018/11/13 Javascript
一篇文章弄懂javascript中的执行栈与执行上下文
2019/08/09 Javascript
js实现无限层级树形数据结构(创新算法)
2020/02/27 Javascript
echarts浮动显示单位的实现方法示例
2020/12/04 Javascript
[38:32]DOTA2上海特级锦标赛A组资格赛#2 Secret VS EHOME第二局
2016/02/26 DOTA
在Python中操作时间之strptime()方法的使用
2020/12/30 Python
python利用不到一百行代码实现一个小siri
2017/03/02 Python
python3 shelve模块的详解
2017/07/08 Python
利用Python-iGraph如何绘制贴吧/微博的好友关系图详解
2017/11/02 Python
Python 异常的捕获、异常的传递与主动抛出异常操作示例
2019/09/23 Python
Python字符串中删除特定字符的方法
2020/01/15 Python
HTML5的自定义属性data-*详细介绍和JS操作实例
2014/04/10 HTML / CSS
用JAVA实现一种排序,JAVA类实现序列化的方法(二种)
2014/04/23 面试题
暑期实习鉴定
2013/12/16 职场文书
党政领导班子群众路线对照检查材料
2014/10/26 职场文书
2015年纪念“卢沟桥事变”78周年活动方案
2015/05/06 职场文书
对领导班子的意见和建议
2015/06/08 职场文书
红高粱观后感
2015/06/10 职场文书
优秀的商业计划书,让融资一步到位
2019/05/07 职场文书