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的“二维”字典 (two-dimension dictionary)定义与实现方法
Apr 27 Python
在python中以相同顺序shuffle两个list的方法
Dec 13 Python
python使用tomorrow实现多线程的例子
Jul 20 Python
python实现通过flask和前端进行数据收发
Aug 22 Python
Python使用psutil获取进程信息的例子
Dec 17 Python
python目标检测给图画框,bbox画到图上并保存案例
Mar 10 Python
详解Python中pyautogui库的最全使用方法
Apr 01 Python
使用python接受tgam的脑波数据实例
Apr 09 Python
Python爬取阿拉丁统计信息过程图解
May 12 Python
python中count函数知识点浅析
Dec 17 Python
Python3爬虫RedisDump的安装步骤
Feb 20 Python
python geopandas读取、创建shapefile文件的方法
Jun 29 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
解析isset与is_null的区别
2013/08/09 PHP
php中使用sftp教程
2015/03/30 PHP
浅谈PHP发送HTTP请求的几种方式
2017/07/25 PHP
Laravel 关联模型-关联新增和关联更新的方法
2019/10/10 PHP
JS获取select的value和text值的简单实例
2014/02/26 Javascript
js打开windows上的可执行文件示例
2014/05/27 Javascript
js计算德州扑克牌面值的方法
2015/03/04 Javascript
jquery实现的Accordion折叠面板效果代码
2015/09/02 Javascript
Ionic如何创建APP项目
2016/06/03 Javascript
jquery实现上传文件大小类型的验证例子(推荐)
2016/06/25 Javascript
JS实现表单多文件上传样式美化支持选中文件后删除相关项
2016/09/30 Javascript
JS触摸屏网页版仿app弹窗型滚动列表选择器/日期选择器
2016/10/30 Javascript
js 打开新页面在屏幕中间的实现方法
2016/11/02 Javascript
基于JS设计12306登录页面
2016/12/28 Javascript
jQuery插件jqGrid动态获取列和列字段的方法
2017/03/03 Javascript
jQuery初级教程之网站品牌列表效果
2017/08/02 jQuery
vue2 前端搜索实现示例
2018/02/26 Javascript
vue+springboot实现项目的CORS跨域请求
2018/09/05 Javascript
微信小程序图片左右摆动效果详解
2019/07/13 Javascript
[55:42]VG vs VGJ.T 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
python基础入门学习笔记(Python环境搭建)
2016/01/13 Python
Python网络爬虫与信息提取(实例讲解)
2017/08/29 Python
python批量修改图片后缀的方法(png到jpg)
2018/10/25 Python
Python基于matplotlib画箱体图检验异常值操作示例【附xls数据文件下载】
2019/01/07 Python
关于tf.nn.dynamic_rnn返回值详解
2020/01/20 Python
python操作yaml说明
2020/04/08 Python
使用Python webdriver图书馆抢座自动预约的正确方法
2021/03/04 Python
CSS3 完美实现圆角效果
2009/07/13 HTML / CSS
css3实现文字扫光渐变动画效果的示例
2017/11/07 HTML / CSS
HTML5 文件上传下载的实例代码
2017/07/03 HTML / CSS
给国外客户的邀请函
2014/01/30 职场文书
公证委托书模板
2014/04/03 职场文书
中学生英语演讲稿
2014/04/26 职场文书
2015小学师德工作总结
2015/07/21 职场文书
pytorch 实现变分自动编码器的操作
2021/05/24 Python
使用Redis做预定库存缓存功能
2022/04/02 Redis