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字符遍历的艺术
Sep 06 Python
对Python中DataFrame按照行遍历的方法
Apr 08 Python
python3+PyQt5实现柱状图
Apr 24 Python
Python正则匹配判断手机号是否合法的方法
Dec 09 Python
python实现全盘扫描搜索功能的方法
Feb 14 Python
使用python来调用CAN通讯的DLL实现方法
Jul 03 Python
由面试题加深对Django的认识理解
Jul 19 Python
Jupyter Notebook 实现正常显示中文和负号
Apr 24 Python
Win10用vscode打开anaconda环境中的python出错问题的解决
May 25 Python
Django 构建模板form表单的两种方法
Jun 14 Python
Django+Celery实现定时任务的示例
Jun 23 Python
python基础之类属性和实例属性
Oct 24 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和XSL stylesheets转换XML文档
2006/10/09 PHP
phpfans留言版用到的install.php
2007/01/04 PHP
解析PHP中常见的mongodb查询操作
2013/06/20 PHP
在PHP中运行Linux命令并启动SSH服务的例子
2014/06/12 PHP
zend framework框架中url大小写问题解决方法
2014/08/19 PHP
ECSHOP在PHP5.5及高版本上报错的解决方法
2015/08/31 PHP
php微信开发自定义菜单
2016/08/27 PHP
PHP后期静态绑定之self::限制实例分析
2018/12/21 PHP
PHP safe_mode开启对于PHP系统函数有什么影响
2020/11/10 PHP
Jquery 学习笔记(一)
2009/10/13 Javascript
jquery弹出关闭遮罩层实例
2013/08/06 Javascript
跟我学习javascript的函数和函数表达式
2015/11/16 Javascript
全选复选框JavaScript编写小结(附代码)
2017/08/16 Javascript
基于jQuery的左滑出现删除按钮的示例
2017/08/29 jQuery
详解nodejs中express搭建权限管理系统
2017/09/15 NodeJs
js实现上传并压缩图片效果
2018/01/10 Javascript
详解vue+vuex+koa2开发环境搭建及示例开发
2018/01/22 Javascript
微信小程序如何像vue一样在动态绑定类名
2018/04/17 Javascript
详解Vue This$Store总结
2018/12/17 Javascript
Python版的文曲星猜数字游戏代码
2013/09/02 Python
Python3网络爬虫之使用User Agent和代理IP隐藏身份
2017/11/23 Python
python 判断矩阵中每行非零个数的方法
2019/01/26 Python
python的time模块和datetime模块实例解析
2019/11/29 Python
python3 简单实现组合设计模式
2020/07/02 Python
python 贪心算法的实现
2020/09/18 Python
美国标志性加大尺码时装品牌:Ashley Stewart
2016/12/15 全球购物
美国职棒大联盟官方网上商店:MLBShop.com
2017/11/12 全球购物
"火柴棍式"程序员面试题
2014/03/16 面试题
mysql有关权限的表都有哪几个
2015/04/22 面试题
网络技术专业求职信
2014/02/18 职场文书
喝酒检查书范文
2014/02/23 职场文书
房产买卖委托公证书
2014/04/04 职场文书
上课不认真检讨书
2014/09/17 职场文书
还款承诺书范本
2015/01/20 职场文书
html2 canvas svg不能识别的解决方案
2021/06/03 HTML / CSS
ant design vue的form表单取值方法
2022/06/01 Vue.js