Python爬虫入门教程02之笔趣阁小说爬取


Posted in Python onJanuary 24, 2021

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

前文

01、python爬虫入门教程01:豆瓣Top电影爬取

基本开发环境

  • Python 3.6
  • Pycharm

相关模块的使用

  • request
  • sparsel

安装Python并添加到环境变量,pip安装需要的相关模块即可。

Python爬虫入门教程02之笔趣阁小说爬取

单章爬取

Python爬虫入门教程02之笔趣阁小说爬取

一、明确需求

爬取小说内容保存到本地

  • 小说名字
  • 小说章节名字
  • 小说内容
# 第一章小说url地址
url = 'http://www.biquges.com/52_52642/25585323.html'
url = 'http://www.biquges.com/52_52642/25585323.html'
headers = {
 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
}
response = requests.get(url=url, headers=headers)
print(response.text)

Python爬虫入门教程02之笔趣阁小说爬取

请求网页返回的数据中出现了乱码,这就需要我们转码了。

加一行代码自动转码。

response.encoding = response.apparent_encoding

Python爬虫入门教程02之笔趣阁小说爬取

三、解析数据

Python爬虫入门教程02之笔趣阁小说爬取

根据css选择器可以直接提取小说标题以及小说内容。

def get_one_novel(html_url):
 # 调用请求网页数据函数
 response = get_response(html_url)
 # 转行成selector解析对象
 selector = parsel.Selector(response.text)
 # 获取小说标题
 title = selector.css('.bookname h1::text').get()
 # 获取小说内容 返回的是list
 content_list = selector.css('#content::text').getall()
 # ''.join(列表) 把列表转换成字符串
 content_str = ''.join(content_list)
 print(title, content_str)

if __name__ == '__main__':
 url = 'http://www.biquges.com/52_52642/25585323.html'
 get_one_novel(url)

Python爬虫入门教程02之笔趣阁小说爬取

四、保存数据(数据持久化)

使用常用的保存方式: with open

def save(title, content):
 """
 保存小说
 :param title: 小说章节标题
 :param content: 小说内容
 :return: 
 """
 # 路径
 filename = f'{title}\\'
 # os 内置模块,自动创建文件夹
 if os.makedirs(filename):
 os.mkdir()
 # 一定要记得加后缀 .txt mode 保存方式 a 是追加保存 encoding 保存编码
 with open(filename + title + '.txt', mode='a', encoding='utf-8') as f:
 # 写入标题
 f.write(title)
 # 换行
 f.write('\n')
 # 写入小说内容
 f.write(content)

Python爬虫入门教程02之笔趣阁小说爬取
Python爬虫入门教程02之笔趣阁小说爬取

保存一章小说,就这样写完了,如果想要保存整本小说呢?

整本小说爬虫

既然爬取单章小说知道怎么爬取了,那么只需要获取小说所有单章小说的url地址,就可以爬取全部小说内容了。

Python爬虫入门教程02之笔趣阁小说爬取

所有的单章的url地址都在 dd 标签当中,但是这个url地址是不完整的,所以爬取下来的时候,要拼接url地址。

def get_all_url(html_url):
 # 调用请求网页数据函数
 response = get_response(html_url)
 # 转行成selector解析对象
 selector = parsel.Selector(response.text)
 # 所有的url地址都在 a 标签里面的 href 属性中 
 dds = selector.css('#list dd a::attr(href)').getall()
 for dd in dds:
 novel_url = 'http://www.biquges.com' + dd
 print(novel_url)


if __name__ == '__main__':
 url = 'http://www.biquges.com/52_52642/index.html'
 get_all_url(url)

Python爬虫入门教程02之笔趣阁小说爬取

这样就获取了所有的小说章节url地址了。

爬取全本完整代码

import requests
import parsel
from tqdm import tqdm


def get_response(html_url):
 headers = {
 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
 }
 response = requests.get(url=html_url, headers=headers)
 response.encoding = response.apparent_encoding
 return response


def save(novel_name, title, content):
 """
 保存小说
 :param title: 小说章节标题
 :param content: 小说内容
 :return:
 """
 filename = f'{novel_name}' + '.txt'
 # 一定要记得加后缀 .txt mode 保存方式 a 是追加保存 encoding 保存编码
 with open(filename, mode='a', encoding='utf-8') as f:
 # 写入标题
 f.write(title)
 # 换行
 f.write('\n')
 # 写入小说内容
 f.write(content)


def get_one_novel(name, novel_url):
 # 调用请求网页数据函数
 response = get_response(novel_url)
 # 转行成selector解析对象
 selector = parsel.Selector(response.text)
 # 获取小说标题
 title = selector.css('.bookname h1::text').get()
 # 获取小说内容 返回的是list
 content_list = selector.css('#content::text').getall()
 # ''.join(列表) 把列表转换成字符串
 content_str = ''.join(content_list)
 save(name, title, content_str)


def get_all_url(html_url):
 # 调用请求网页数据函数
 response = get_response(html_url)
 # 转行成selector解析对象
 selector = parsel.Selector(response.text)
 # 所有的url地址都在 a 标签里面的 href 属性中
 dds = selector.css('#list dd a::attr(href)').getall()
 # 小说名字
 novel_name = selector.css('#info h1::text').get()
 for dd in tqdm(dds):
 novel_url = 'http://www.biquges.com' + dd
 get_one_novel(novel_name, novel_url)

if __name__ == '__main__':
 novel_id = input('输入书名ID:')
 url = f'http://www.biquges.com/{novel_id}/index.html'
 get_all_url(url)

Python爬虫入门教程02之笔趣阁小说爬取
Python爬虫入门教程02之笔趣阁小说爬取

到此这篇关于Python爬虫入门教程02之笔趣阁小说爬取的文章就介绍到这了,更多相关Python爬虫笔趣阁小说爬取内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python文件比较示例分享
Jan 10 Python
跟老齐学Python之一个免费的实验室
Sep 14 Python
Python实现股市信息下载的方法
Jun 15 Python
Python ftp上传文件
Feb 13 Python
pyqt5的QComboBox 使用模板的具体方法
Sep 06 Python
Python网页正文转换语音文件的操作方法
Dec 09 Python
python数据挖掘需要学的内容
Jun 23 Python
如何实现Django Rest framework版本控制
Jul 25 Python
python实现输入的数据在地图上生成热力图效果
Dec 06 Python
pycharm配置python 设置pip安装源为豆瓣源
Feb 05 Python
python获取淘宝服务器时间的代码示例
Apr 22 Python
Flask搭建一个API服务器的步骤
May 28 Python
Python爬虫入门教程01之爬取豆瓣Top电影
Jan 24 #Python
详解python的变量缓存机制
Jan 24 #Python
Python字符串对齐、删除字符串不需要的内容以及格式化打印字符
Jan 23 #Python
利用Python函数实现一个万历表完整示例
Jan 23 #Python
python将YUV420P文件转PNG图片格式的两种方法
Jan 22 #Python
如何使用Python进行PDF图片识别OCR
Jan 22 #Python
详解pandas映射与数据转换
Jan 22 #Python
You might like
PHP个人网站架设连环讲(一)
2006/10/09 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
PHP+Oracle本地开发环境搭建方法详解
2019/04/01 PHP
jQuery 类twitter的文本字数限制带提示效果插件
2010/04/16 Javascript
javascript动态向网页中添加表格实现代码
2014/02/19 Javascript
js调用iframe实现打印页面内容的方法
2014/03/04 Javascript
jQuery使用hide方法隐藏指定元素class样式用法实例
2015/03/30 Javascript
JS实现支持多选的遍历下拉列表代码
2015/08/20 Javascript
JS简单设置下拉选择框默认值的方法
2016/08/20 Javascript
jQuery给指定的table动态添加删除行的操作方法
2016/10/12 Javascript
使用JS 插件qrcode.js生成二维码功能
2017/02/20 Javascript
Node做中转服务器转发接口
2017/10/18 Javascript
小程序实现上传视频功能
2020/08/18 Javascript
python多进程共享变量
2016/04/06 Python
Python栈算法的实现与简单应用示例
2017/11/01 Python
Django处理文件上传File Uploads的实例
2018/05/28 Python
python2和python3的输入和输出区别介绍
2018/11/20 Python
对python读写文件去重、RE、set的使用详解
2018/12/11 Python
PyQt5实现简单数据标注工具
2019/03/18 Python
python 处理微信对账单数据的实例代码
2019/07/19 Python
PYQT5开启多个线程和窗口,多线程与多窗口的交互实例
2019/12/13 Python
pytorch ImageFolder的覆写实例
2020/02/20 Python
CSS3教程(10):CSS3 HSL声明设置颜色
2009/04/02 HTML / CSS
CSS3中Animation动画属性用法详解
2016/07/04 HTML / CSS
html5使用canvas画空心圆与实心圆
2014/12/15 HTML / CSS
世界上最具创新性的增强型知名运动品牌:Proviz
2018/04/03 全球购物
微软美国官方网站:Microsoft美国
2018/05/10 全球购物
自然健康的概念:Natural Healthy Concepts
2020/01/26 全球购物
英国网上电器商店:Electricshop
2020/03/15 全球购物
媒体宣传策划方案
2014/05/25 职场文书
庆七一宣传标语
2014/10/08 职场文书
批评与自我批评总结
2014/10/17 职场文书
实习指导教师评语
2014/12/30 职场文书
html form表单基础入门案例讲解
2021/07/21 HTML / CSS
Java设计模式之享元模式示例详解
2022/03/03 Java/Android
win10怎么设置右下角图标不折叠?Win10设置右下角图标不折叠的方法
2022/07/15 数码科技