昨天,数据猿爬取到了笔趣小说一个近2735章的爽文小说,整个过程较为顺利。
今天,数据猿整理了一下代码,分享给大家。
目录如下:
[TOC]
第0步,准备本文运行环境:Python3.8,Pycharm;Win10系统
需要的库 :requests、bs4、re 、fake-useagent
整个爬虫的思路是找到目标小说的所有章节链接
根据所有的章节链接,构造小说内容的网址
爬取内容并保存
第1步,分析目标网页
浏览器内按F12,查看该小说章节页面的html,crtl+F来查询某一章节“开启神武印记”,从而找到章节链接所在的位置。
可以定位到章节所在的位置在body-div-div-div-d1-dd-a标签中,所以我们用
如法炮制,我们可以确定小说内容所在的网页。
第2步,解析页面
bs4解析章节页面
先用find_all选中dd标签,然后枚举find_all得到的列表,使用列表解析式分别选取其中的['href']链接和get_text()文本内容。得到一个元组,分别是链接和标题,用来生成每一章的内容。
# bs4解析
soup = BeautifulSoup(html, 'lxml')
all_link = [(link.a['href'],link.a.get_text()) for link in soup.find_all('dd')]
print(all_link)
得到如下元组列表
[('/20_20331/1135932.html', '第1章 八百年后'), ('/20_20331/1135933.html', '第2章 开启神武印记'), ('/20_20331/1135934.html', '第3章 黄极境')。。。。]
bs4解析内容页面
使用find方法选中div标签,Id为content的文本内容
# bs4解析
soup = BeautifulSoup(html,'lxml')
content = soup.find('div',{'id':'content'}).get_text()
print(content)
得到每一章的小说内容
第3步,自动化爬取
伪装浏览器响应头
这里,数据猿推荐大家使用fake_useragent库,随机生成响应头来伪装浏览器。
# 浏览器响应头
def get_ua():
ua = UserAgent()
return ua.random
章节→内容
看完第二步,相比有的小伙伴想问,要想实现自动爬取,肯定要程序自动通过章节链接得到每一章的小说内容,这个自动过程如何实现呢?
前面得到的元祖列表,通过切片,分别成为新的内容页面的url和章节标题。
for i in alllinks:
one_url = 'https://www.xsbiquge.com' + i[0]
char = i[1]
设置休眠时间
利用time模块,添加time.sleep()来设置每一页的响应时间,以避免访问太过频繁被封。
小结(完整代码):
在获取链接的时候,数据猿开始对bs4有点不熟悉,一度想使用re库来获取,但是re库获取缺乏结构,稳定性较差,结果中有一个页面,多选取了一个class标签,而通过bs4则相对稳定,没有出现这个问题。
公众号:文科数据员 后台回复 ==爬小说== 获取全文完整代码。
往期精品:
本文系纯原创,如有纰漏,敬请指出
文字编辑:数据猿Riggle