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操作MySQL数据库具体方法
Oct 28 Python
让python同时兼容python2和python3的8个技巧分享
Jul 11 Python
编写多线程Python服务器 最适合基础
Sep 14 Python
python查询文件夹下excel的sheet名代码实例
Apr 02 Python
详解用python实现基本的学生管理系统(文件存储版)(python3)
Apr 25 Python
浅析Python3中的对象垃圾收集机制
Jun 06 Python
pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换
Jan 13 Python
python实现扫雷游戏
Mar 03 Python
python解析xml文件方式(解析、更新、写入)
Mar 05 Python
TensorFlow2.1.0最新版本安装详细教程
Apr 08 Python
Pyinstaller打包Scrapy项目的实现步骤
Sep 22 Python
Anaconda安装pytorch及配置PyCharm 2021环境
Jun 04 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数据库备份与还原类实例
2014/12/09 PHP
PHP连接SQLServer2005的方法
2015/01/27 PHP
PHP+Mysql+Ajax实现淘宝客服或阿里旺旺聊天功能(前台页面)
2017/06/16 PHP
PHP ADODB生成HTML表格函数rs2html功能【附错误处理函数用法】
2018/05/29 PHP
php使用scandir()函数扫描指定目录下所有文件示例
2019/06/08 PHP
半角全角相互转换的js函数
2009/10/16 Javascript
jQuery实现简单的图片查看器
2020/09/11 Javascript
基于JavaScript实现通用tab选项卡(通用性强)
2016/01/07 Javascript
jquery ui dialog替代confirm实例分析
2016/01/25 Javascript
javascript解决小数的加减乘除精度丢失的方案
2016/05/31 Javascript
jQuery图片轮播插件——前端开发必看
2016/05/31 Javascript
vue实现简单表格组件实例详解
2017/04/16 Javascript
vue刷新和tab切换实例
2018/02/11 Javascript
vue-router相关基础知识及工作原理
2018/03/16 Javascript
详解如何使用webpack打包多页jquery项目
2019/02/01 jQuery
node.JS二进制操作模块buffer对象使用方法详解
2020/02/06 Javascript
NodeJS配置CORS实现过程详解
2020/12/02 NodeJs
Python处理文本文件中控制字符的方法
2017/02/07 Python
python的pdb调试命令的命令整理及实例
2017/07/12 Python
python 3利用Dlib 19.7实现摄像头人脸检测特征点标定
2018/02/26 Python
基于python实现学生管理系统
2018/10/17 Python
详解如何为eclipse安装合适版本的python插件pydev
2018/11/04 Python
eclipse创建python项目步骤详解
2019/05/10 Python
Python编程学习之如何判断3个数的大小
2019/08/07 Python
python 利用pywifi模块实现连接网络破解wifi密码实时监控网络
2019/09/16 Python
window7下的python2.7版本和python3.5版本的opencv-python安装过程
2019/10/24 Python
python实现按首字母分类查找功能
2019/10/31 Python
手动安装python3.6的操作过程详解
2020/01/13 Python
使用html2canvas将页面转成图并使用用canvas2image下载
2019/04/04 HTML / CSS
芬兰汽车配件商店:Autonvaraosat24
2017/01/30 全球购物
新西兰航空中国官网:Air New Zealand China
2018/07/24 全球购物
药学专业学生的自我评价分享
2014/02/06 职场文书
田径运动会通讯稿
2014/09/13 职场文书
交通事故协议书范本
2014/11/18 职场文书
银行培训心得体会范文
2016/01/09 职场文书
Pandas实现DataFrame的简单运算、统计与排序
2022/03/31 Python