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 相关文章推荐
Scrapy-redis爬虫分布式爬取的分析和实现
Feb 07 Python
python3.4.3下逐行读入txt文本并去重的方法
Apr 29 Python
Python import与from import使用及区别介绍
Sep 06 Python
浅谈python的dataframe与series的创建方法
Nov 12 Python
python存储16bit和32bit图像的实例
Dec 05 Python
Python读取stdin方法实例
May 24 Python
python按行读取文件并找出其中指定字符串
Aug 08 Python
基于Numba提高python运行效率过程解析
Mar 02 Python
Tensorflow卷积实现原理+手写python代码实现卷积教程
May 22 Python
Python通过Schema实现数据验证方式
Nov 12 Python
Python 转移文件至云对象存储的方法
Feb 07 Python
python数据分析之用sklearn预测糖尿病
Apr 22 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独立Session数据库存储操作类分享
2014/06/11 PHP
PHP采集类Snoopy抓取图片实例
2014/06/19 PHP
php中spl_autoload详解
2014/10/17 PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
2017/09/20 PHP
PHP+MySQL高并发加锁事务处理问题解决方法
2018/04/30 PHP
Javascript之文件操作
2007/03/07 Javascript
JavaScript 中的事件教程
2007/04/05 Javascript
Javascript select控件操作大全(新增、修改、删除、选中、清空、判断存在等)
2008/12/19 Javascript
JavaScript CSS修改学习第五章 给“上传”添加样式
2010/02/19 Javascript
javascript 设为首页与加入收藏兼容多浏览器代码
2011/01/11 Javascript
改进UCHOME的记录发布,增强可访问性用户体验
2011/01/17 Javascript
js如何判断用户是在PC端和还是移动端访问
2014/04/24 Javascript
javascript格式化指定日期对象的方法
2015/04/21 Javascript
微信支付 JS API支付接口详解
2016/07/11 Javascript
详解JSONObject和JSONArray区别及基本用法
2017/10/25 Javascript
使用eslint和githooks统一前端风格的技巧
2020/07/29 Javascript
python 3.5实现检测路由器流量并写入txt的方法实例
2017/12/17 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
2018/06/28 Python
在Python dataframe中出生日期转化为年龄的实现方法
2018/10/20 Python
关于Python-faker的函数效果一览
2019/11/28 Python
Keras设置以及获取权重的实现
2020/06/19 Python
用Python爬取LOL所有的英雄信息以及英雄皮肤的示例代码
2020/07/13 Python
巴西婴儿用品商店:Bebe Store
2017/11/23 全球购物
全球最大化妆品零售网站:SkinStore
2020/10/24 全球购物
高二化学教学反思
2014/01/30 职场文书
索桥的故事教学反思
2014/02/06 职场文书
微笑面对生活演讲稿
2014/05/13 职场文书
社会发展项目建议书
2014/08/25 职场文书
鲁迅故里导游词
2015/02/05 职场文书
银行保安拾金不昧表扬稿
2015/05/05 职场文书
道歉的话怎么说
2015/05/12 职场文书
论语读书笔记
2015/06/26 职场文书
大学三好学生主要事迹范文
2015/11/03 职场文书
祝福语集锦:送给毕业同学祝福语
2019/11/21 职场文书
一文帮你理解PReact10.5.13源码
2021/04/03 Javascript
pandas中DataFrame检测重复值的实现
2021/05/26 Python