python分页爬取page_BeautifulSoup爬取网页分页

本文介绍了使用Python爬虫通过深度优先搜索策略爬取古诗词网站的分页内容。首先分析网页结构,找到“下一页”链接的URL规律,通过递归访问所有分页。此外,还探讨了通过分析URL映射关系,用循环生成所有分页URL,以提高爬取效率。最后,代码展示了如何抓取并保存诗词内容。
摘要由CSDN通过智能技术生成

在前面我们介绍了如何通过某个页面爬取与之关联的外部网页,当时介绍的是使用广度优先搜索的方式爬取。

在本节,我们将介绍另一种爬取外部链接的方式,即深度优先搜索,爬取网页的分页。

由于本人喜欢古诗词,今天爬取的网页的内容就是古诗词,爬取的链接为:https://so.gushiwen.org/shiwen/。

如下图所示:

在同一个网页,内容是通过分页的形式进行展示,今天介绍如何爬取分页。

一、思路分析

我们知道,对于网页的分页内容访问,我们通常可以通过点击“上一页”或者“下一页”按钮访问关联的页面。

因此,在爬取分页内容的时候,我们可以采用这一思路,进行深度递归,即可访问所有的分页内容。

当然,事实上,由于软件工程师在编码过程中会对不同分页的url做一定的映射,因此除了以上思路,我们可以选择另外一种解决办法就是分析这种映射关系是什么。

如果能确定映射关系,那么就不需要进行深度递归,毕竟操作系统对于编程语言的栈的深度是有限制的,比如python最多递归1000次,超过1000次将报栈溢出的错误。

在接下来的示例演示中将对两种方法进行介绍。

二、示例演示

1.深度递归访问分页内容

正如之前一直强调的,在使用网络爬虫进行网页爬取的时候,第一步总是先打开目标网页,然后在开发者模式下分析网页的特点,然后根据分析的结果进行爬取。

打开目标网页的结构如下图所示:

在网页中搜索“下一页”按钮所在的标签位置,我们可以看到如上的结果。并且通过认真观察,我们能够看见“下一页”所在的标签是一个超链接,因此我们可以猜测,这个链接就是用来从当前页跳转到下一页。

为了验证我们的猜想是否正确,我们可以直接点开“下一页”按钮的跳转页面是否与我们刚才观察的url一致。

打开“下一页”的页面,我们可以看到url如下:

显然,两个页面是存在联系的。浏览器中的url和超链接的url除了隔了域名https://so.gushiwen.org/不一样之外,后半部分都是一致的。

因此证实了我们的猜想是正确的,因此我们只需要获取页面中“下一页”中超链接的url,再拼接上域名,就能得到下一页页面的url。通过递归操作,我们能够爬取所有的页面。

这里定义一个函数进行实现,使用一个队列存储每次获取的url:

def getNextUrl(url,que):

'''

:return:

'''

if url==None or len(url)==0:

return

try:

html = requests.get(url)

html.encoding = None

new_url = bs.findAll("a", {"class": "amore"})[0].attrs['href']

new_url= domain_prefix+new_ur

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值