需求目标

介绍使用 requests 库与 lxml 库进行简单的网页数据爬取普通框架与爬虫实例,本文以爬取网页连载小说《撒野》为例~

当然有很多小说基本都能找到现成的 .txt 或者 .mobi 文件,不过有些又是注册登录,又是关注公众号啥的,我干脆写几行代码自己爬下来,之后有需要略微改下网页链接就行,一劳永逸~哈哈哈哈


requests+lxml 爬虫框架

1、一般通过 requests 库的 get(url, headers = header) 方法获取 html 页面,可以根据状态码判断是否请求成功(我一般自己爬点需要的东西就行了,所以没有判断);

2、通过 lxml 库对请求的到的数据进行 XPath 解析,获取想要的数据内容;

3、对爬到的数据进行后续处理,我一般存到 .txt 文件或者数据库备用;

4、多个页面的话,for 循环重复过程搞定。


爬虫实例

此处以《撒野》为例进行爬取~

通过百度得到一个全文免费阅读网站,点进去是这样的,发现是一章一章的内容,很棒,选择第一章。

点进去就是正文啦,正文的最后一般都有"下一章"按钮,仍然很棒,可以粗暴的 for 循环。

ok,我们开始吧!过程中可以随时把内容 print() 看看有没有问题。

实例代码

# -*- coding: utf-8 -*-
import requests as re
from lxml import etreefile = open('saye.txt', 'w', encoding='utf-8')
url = 'https://www.bqg8.la/57_57576/25070353.html'
chapter = 1
chapterNum = 150header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.193 Safari/537.36'
}def getContent():global url, chapterresponse = re.get(url, headers = header)response.encoding = 'gbk'data = etree.HTML(response.text)file.write("\n\n第{0}章\n".format(chapter))chapter += 1str = data.xpath('string(//div[@id="content"])')file.write('\n    '.join(str.split()))url = data.xpath('//a[text()="下一章"]/@href')[0]print(url)if __name__ == '__main__':for i in range(chapterNum):getContent()file.close()

其中几个参数的获取

1、网页 Headers 信息:在网页中按下 F12 进入调试页面(Chrome 浏览器),选择 Network 模块,找到网页文件 .html ,没有的话就按 F5 刷新下网页就有了,点击 html 文件,在右侧出来的 Headers 列表中找到 Request Headers 中的 User-Agent 。

我们得到的 User-Agent 为:‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.193 Safari/537.36'

如下图我们就找到该网页的 Header 信息

2、小说正文的 XPath 路径:还是在网页中按下 F12 进入调试页面,选择 Elements 模块(默认选中),通过浏览器自带的选择工具(快捷键 Ctrl+Shift+C),选择小说正文,Elements 代码自动选中到正文部分的代码,此时右键→Copy→Copy XPath 前往代码进行粘贴,其实有ID的标签最好找了。

我们的得到的小说正文部分 XPath 为:‘//*[@id="content"]’

那么代码中直接获取该部分下所有的文字就好了:

str = data.xpath('string(//div[@id="content"])')

3、下一章的 XPath 路径:同样的方法得到下一章的 XPath 路径为:’//*[@id="box_con"]/div[9]/a[4]‘,不过为了保险起见,我代码中用的 XPath 是:'//a[text()="下一章"]'。

那么下一章的网页地址也就有了:

url = data.xpath('//a[text()="下一章"]/@href')[0]

4、chapterNum:由于用的是 for 循环,我就直接看了下《撒野》一共有 150 章,那我直接循环 150 次就好了,for i in range(150) 搞定。

5、如果遇到 response.text 中文乱码,解决方案见我的另一篇博文 通过requests包爬虫response.text中文乱码

运行结果

最后得到的 .txt 文件,如果有需要可以再进行微调,比如使用 sublime text 把不想要的内容 Replace All。

或者想转换成电子书在其他设备上看的话,可以用 Calibre 进行转换得到如 .mobi 文件,转换得到的电子书可以生成目录,自己设置封面、设置段落格式等等,还是挺不错的体验。

我发现又可以写篇 使用 Calibre 将 .txt 转换为带目录的 .mobi 电子书格式文件

使用 requests+lxml 库的 Python 爬虫实例(以爬取网页连载小说《撒野》为例)相关推荐

  1. 2021-02-27爬虫实例(爬取照片)以虎牙为例

    爬虫实例(爬取照片)以虎牙为例 开始之前点赞,投币加关注哦 开发环境:Python3.7 开发软件:PyCharm Edu 第一步:导入第三方库(模块) # 导入第三方库 import request ...

  2. Python爬虫:Xpath爬取网页信息(附代码)

    Python爬虫:Xpath爬取网页信息(附代码) 上一次分享了使用Python简单爬取网页信息的方法.但是仅仅对于单一网页的信息爬取一般无法满足我们的数据需求.对于一般的数据需求,我们通常需要从一个 ...

  3. Python爬虫实例: 爬取“最好大学网”大学排名

    实例2 爬取大学排名 上海交通大学设计了一个"最好大学网",上面列出了当前的大学排名.我们要设计爬虫程序,爬取大学排名信息. 爬虫功能要求: 输入:大学排名URL链接 输出:大学排 ...

  4. python爬虫实例之爬取智联招聘数据

    这是作者的处女作,轻点喷.... 实习在公司时领导要求学习python,python的爬虫作为入门来说是十分友好的,话不多说,开始进入正题. 主要是爬去智联的岗位信息进行对比分析出java和pytho ...

  5. Python爬虫实例:爬取 viveport 上 1406 款VR游戏信息

    这次我们准备爬取 HTC VIVE 的VR内容平台--Viveport,上面有 1406 款优质的 VR 游戏/应用,本次我们的目标就是把这些游戏的详细信息爬取下来. 首先我们去该网站看一下(http ...

  6. Python爬虫实例:爬取猫眼电影——破解字体反爬

    字体反爬 字体反爬也就是自定义字体反爬,通过调用自定义的字体文件来渲染网页中的文字,而网页中的文字不再是文字,而是相应的字体编码,通过复制或者简单的采集是无法采集到编码后的文字内容的. 现在貌似不少网 ...

  7. python爬取b站搜索结果_Python爬虫实例:爬取猫眼电影——破解字体反爬,Python爬虫实例:爬取B站《工作细胞》短评——异步加载信息的爬取,Python爬虫实例:爬取豆瓣Top250...

    字体反爬 字体反爬也就是自定义字体反爬,通过调用自定义的字体文件来渲染网页中的文字,而网页中的文字不再是文字,而是相应的字体编码,通过复制或者简单的采集是无法采集到编码后的文字内容的. 现在貌似不少网 ...

  8. Python爬虫实例:爬取国内所有医院信息

    本博客仅用于技术讨论,若有侵权,联系笔者删除. 此次的目的是爬取国内医院的基本信息,并按省份存储.爬取的黄页是医院列表.以下是结果图: 一.初始化数据 初始化基本的数据,包括global变量,省份名称 ...

  9. Python爬虫实例(二)——爬取新冠疫情每日新增人数

    Python是世界上最美的语言 大家好,我是Henry! 疫情以来,相信大家每天都关注着疫情的实时动态,许多网站上也post了疫情的相关资料. 丁香园 百度 各个网站都会统计每日新增,刚学了Matpl ...

最新文章

  1. linux内核环境变量,Linux上安装配置JDK环境变量
  2. ajax spring mvc 接收json数据,easyui ajax请求获取SpringMVC @ResponseBody返回的Json数据为什么非得eval才能通过对象获取值?...
  3. psp能装安卓软件吗_王思聪:翻译软件能翻译出文化吗?
  4. 年度总结 | 2020CSDN的第一桶金
  5. 静态变量不能跨函数使用
  6. MediaPlayer对象从停止状态到播放状态调用的方法是prepare()和start()
  7. 如何快速搭建在线教育知识付费系统(附带源码)
  8. 计算机网络试题及答案(史上最全)
  9. [南阳OJ-No.33]蛇形填数|在n*n方陈里填入1,2,...,n*n,要求填成蛇形。
  10. 趣图 | 早起的你 vs 熬夜的你
  11. 面试-android
  12. matlab判断星期几的语句,计算某一天是星期几的matlab程序
  13. 重拳出击之《JVM》面试官版 (初哥勿看)
  14. POJO JAVABEAN EJB的区别和联系
  15. C语言_函数递归举例
  16. 导图解文 从梦想到财富(02)你拥有最宝贵的财富是什么?
  17. 钉钉小程序图表刷新 antv-f2
  18. 大数据学习之Flink环境搭建+提交任务方式
  19. SQL Server设置周一为每周第一天
  20. 数电大作业—简易抢答器设计

热门文章

  1. 用不到 50 行的 Python 代码构建最小的区块链
  2. 分享淘宝客的产品分析与推广方法
  3. b级计算机考试在线试题及答案,计算机b级考试试题及答案
  4. Android最新敲诈者病毒分析及解锁
  5. lass、paas、sass的区别
  6. [附源码]java毕业设计多功能电子词典
  7. 在运行vue项目时发生这种 Cannot find module ‘xxxxx‘ ,解决办法?
  8. 游戏介绍——钢琴块2
  9. BCEWithLogitsLoss
  10. HTML 通过ID、class、tagName(标签名字)获取 DOM