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中as用法实例分析
Apr 30 Python
Python读取指定目录下指定后缀文件并保存为docx
Apr 23 Python
Windows平台Python连接sqlite3数据库的方法分析
Jul 12 Python
python使用筛选法计算小于给定数字的所有素数
Mar 19 Python
Python中if elif else及缩进的使用简述
May 31 Python
Django实现分页功能
Jul 02 Python
Python使用pickle模块储存对象操作示例
Aug 15 Python
python3中的eval和exec的区别与联系
Oct 10 Python
Jupyter Notebook 文件默认目录的查看以及更改步骤
Apr 14 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
May 12 Python
Python Pivot table透视表使用方法解析
Sep 11 Python
浅谈tf.train.Saver()与tf.train.import_meta_graph的要点
May 26 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 CURL模拟登录新浪微博抓取页面内容 基于EaglePHP框架开发
2012/01/16 PHP
php页面跳转代码 输入网址跳转到你定义的页面
2013/03/28 PHP
php编程每天必学之验证码
2016/03/03 PHP
关于IE浏览器以及Firefox下的javascript冒泡事件的响应层级
2010/10/14 Javascript
JS实现随机数生成算法示例代码
2013/08/08 Javascript
jquery ajaxSubmit 异步提交的简单实现
2014/02/28 Javascript
ajax请求乱码的解决方法(中文乱码)
2014/04/10 Javascript
使用百度地图api实现根据地址查询经纬度
2014/12/11 Javascript
node.js中的fs.fstatSync方法使用说明
2014/12/15 Javascript
javascript实现base64 md5 sha1 密码加密
2015/09/09 Javascript
JS实现仿腾讯微博无刷新删除微博效果代码
2015/10/16 Javascript
Bootstrap Chart组件使用教程
2016/04/28 Javascript
AngularJS中实现动画效果的方法
2016/07/28 Javascript
js制作支付倒计时页面
2016/10/21 Javascript
利用yarn代替npm管理前端项目模块依赖的方法详解
2017/09/04 Javascript
Angular中使用better-scroll插件的方法
2018/03/27 Javascript
使用webpack构建应用的方法步骤
2019/03/04 Javascript
vue父子组件通信的高级用法示例
2019/08/29 Javascript
JS字符串补全方法padStart()和padEnd()
2020/05/27 Javascript
解决vue axios跨域 Request Method: OPTIONS问题(预检请求)
2020/08/14 Javascript
Python Web开发模板引擎优缺点总结
2014/05/06 Python
利用QT写一个极简单的图形化Python闹钟程序
2015/04/07 Python
Python内置模块turtle绘图详解
2017/12/09 Python
python学生信息管理系统(初级版)
2018/10/17 Python
Python笔记之观察者模式
2019/11/20 Python
Python Lambda函数使用总结详解
2019/12/11 Python
在Python IDLE 下调用anaconda中的库教程
2020/03/09 Python
Python下使用Trackbar实现绘图板
2020/10/27 Python
使用HTML5 Geolocation实现一个距离追踪器
2018/04/09 HTML / CSS
全球速卖通巴西站点:Aliexpress巴西
2016/08/24 全球购物
大学生第一学年自我鉴定
2014/09/12 职场文书
2016高考感言
2015/08/01 职场文书
社会心理学学习心得体会
2016/01/22 职场文书
2019年鼓励无偿献血倡议书
2019/09/17 职场文书
深入理解mysql事务隔离级别和存储引擎
2022/04/12 MySQL
安装Windows Server 2012 R2企业版操作系统并设置好相关参数
2022/04/29 Servers