html如何获取请求头变量的值。_Python爬虫基础获取小说实例

2020  04 07 Python爬取小说实例

cdebad28560ebec455600bd1b401f42a.gif

01前言 这里以笔趣阁中的一部小说为例:
https://www.biduo.cc/biquge/40_40847/
将小说每一章的内容爬取下来保存到本地。如下是我们要爬取的小说目录内容:

797da070b651e231dca9c016c5de0177.png

c437e5694b5abd7b1ebd4866a6c9c5e1.gif

02爬下来的数据

472a4a73841687214b9efc5e6e202d4d.png

684cdcc2249890ee542dece107013870.gif

03正式分析网页拿到数据 首先利用requests库的强大能力,向目标url:
https://www.biduo.cc/biquge/40_40847/

发起请求,拿到页面中的所有HTML数据。 需要注意的是: 请求太多次很容易被反爬,最好在请求时带上请求头(模拟浏览器发请求),每个人的浏览器的请求头都不同,不能直接使用我代码中的请求头,怎么获取自己的请求头可按如下图方式拿到:

998851913c476aa6a4ac1dd1932babd7.png

拿到所有HTML数据后,利用正则库结合XPath语法(可以自己去学一下XPath 教程:)

https://www.w3school.com.cn/xpath/index.asp
从中抽取章名和每一章的链接,如下:
//*[@id="list"]/dl/dd/a/text() //*[@id="list"]/dl/dd/a/@href

 通过上面两个XPath语法,即可拿到我们需要的章节名称和对应的链接地址(PS:这里浏览器中的黑框小工具,是谷歌浏览器的一个扩展程序Xpath Help,需要这个扩展程序的小伙伴,可在我公众号回复 扩展程序 获取)


84e6ed97c7efc9989e10b89cd92ae8ab.png

a3304d50cc7acc16080762188a925777.gif

af09f9b6be77e4d59488b1e60c9df0fd.png

a3304d50cc7acc16080762188a925777.gif 现在已经可以拿到,我们需要的章节名称和对应每一章的链接地址了,这里得到的每一章的链接地址还不是一个完整的url地址,分析地址栏可知目标url:
https://www.biduo.cc/biquge/40_40847/
与每一章的链接地址拼接,即可得到我们最终所需的 URL请求地址

Python

# 2. 请求文章拿到HTML数据,抽取文章内容并保存response = requests.get(url + src,headers=headers)
得到最终URL后,层层递进,相同的方法:向最终的URL地址发起请求,得到小说 内容页的 所有HTML数据,再从中抽取我们需要的小说文字内容,并保存到本地以我们抽取到的章名来命名文件:

Python

# 2. 请求文章拿到HTML数据,抽取文章内容并保存response = requests.get(url + src,headers=headers)html = etree.HTML(response.content.decode('gbk'))  # 整理文档对象content = "\n".join(html.xpath('//*[@id="content"]/text()'))file_name = tit + ".txt"print("正在保存文件:{}".format(file_name))with open(file_name, "a", encoding="utf-8") as f:    f.write(content)

31fa930acf8ad64f694f0673985ca8f3.png

a3304d50cc7acc16080762188a925777.gif

04 数据获取中...

8407a7f5c3a2fc1b063a93262bc37e9f.png

  • a3304d50cc7acc16080762188a925777.gif

示例代码

Python

import requestsfrom lxml import etreeurl = "https://www.biduo.cc/biquge/40_40847/"headers = {    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'}class Spider(object):    def detail_request(self):        # 1. 请求目录拿到HTML数据,抽取章名、章链接        response = requests.get(url,headers=headers)        # print(response.content.decode('gbk'))        html = etree.HTML(response.content.decode('gbk'))  # 整理文档对象        # print(html)        tit_list = html.xpath('//*[@id="list"]/dl/dd/a/text()')        url_list = html.xpath('//*[@id="list"]/dl/dd/a/@href')        print(tit_list,url_list)        for tit, src in zip(tit_list, url_list):            self.content_request(tit, src)    def content_request(self, tit, src):        # 2. 请求文章拿到HTML数据,抽取文章内容并保存        response = requests.get(url + src,headers=headers)        html = etree.HTML(response.content.decode('gbk'))  # 整理文档对象        content = "\n".join(html.xpath('//*[@id="content"]/text()'))        file_name = tit + ".txt"        print("正在保存文件:{}".format(file_name))        with open(file_name, "a", encoding="utf-8") as f:            f.write(content)spider = Spider()spider.detail_request()
05End 到这里就结束了,代码还可再改进一下,相同的方法增加一级请求,爬取整个网站的所有小说,保存到本地的数据也可以在保存时增加一些格式控制,让数据看起来清晰整洁一些,当然,这些都是要自己花时间学的。06编程之外 sdgsd问题哇服务器而fsdfasfsfsasfssfgssdgsdfsdf>

我不是很喜欢看文字类的小说,相比起来更倾向于声小说,听过的第一部完整有声小说就是周建龙演播的《盗墓笔记》 很有代入感,当然本来是用来晚上催眠用的,不知怎的就误入坑中了。结合自己的兴趣,下期分享利用百度AI怎么把爬取到的小说文字数据转化为音频数据。


需要Chrome的那个扩展程序 XPath Helper 的记得 在我的公众号回复 扩展程序   免费获取哦! cdebad28560ebec455600bd1b401f42a.gif 621bcc6abf857f44836d2aef888c53b9.png c437e5694b5abd7b1ebd4866a6c9c5e1.gif

CSDN:与世间美好环环相扣

公众号:编程之外扫码关注编程之外
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值