scrapy分页抓取网页( WebScraper怎么对付这种类型的网页翻页?(图))
优采云 发布时间: 2022-02-03 08:19scrapy分页抓取网页(
WebScraper怎么对付这种类型的网页翻页?(图))
这是简易数据分析系列文章的第12期。html
在之前的文章中文章我们介绍了Web Scraper处理各种页面翻转的解决方案,比如修改网页连接加载数据,点击“更多按钮”加载数据,下拉自动加载数据。今天我们讲一种比较常见的翻页方式——pager。网络
本来想解释一下什么是pager,但是看了一堆定义,觉得很麻烦。你不是第一年上网,看图就知道了。我找到了一个功能齐全的例子,支持数字页码调整,上一页到下一页和指定页数跳转。邮政
今天我们将学习 Web Scraper 如何处理这种类型的翻页。温泉
事实上,在本教程的第一个示例中,我们就抓取了豆瓣电影 TOP 榜单。这个豆瓣电影列表使用寻呼机来划分数据:代码
但是当时我们是在寻找网页连接规则来爬取,并没有使用pager来爬取。因为当一个网页的连接有规律的变化时,控制连接参数捕获是成本最低的;如果网页可以翻页,但是连接的变化不规律,就得去pager了一会儿。视频
说这些理论有点无聊,我们举个不规则翻页连接的例子。htm
8月2日是蔡徐坤的生日。为了庆祝,微博上的粉丝给了坤坤300W的转发。微博的转发数据恰好被寻呼机分割。我们来分析一下微博的转发。信息页面,了解如何使用 Web Scraper 抓取此类数据。博客
这条微博的直接链接是:教程
元素
看了这么多他的视频,为了表达我们的感激之情,我们可以点进点出给坤坤加个阅读。
首先我们看一下第1页转发的连接,长这样:
第二页是这样的,我注意到有一个额外的#_rnd36 参数:
第三页参数为#_rnd39
第 4 页参数是#_rnd76:
又看了几个链接,发现这个转发页面的url没有规则,只能通过pager翻页加载数据。让我们开始我们的实践教学课程。
1.创建站点地图
我们首先创建一个SiteMap,这个时候命名为cxk,初始连接是。
2.为容器创建一个选择器
由于我们要点击pager,所以我们选择外层容器的类型为Element Click。具体参数说明见下图。我们之前在《简单数据分析08》中详细讲解过,这里就不多说了。
容器的预览如下图所示:
寻呼机选择过程如下图所示:
3.创建子选择器
这些子选择器比较简单,类型都是文本选择器。我们选择了三种类型的内容:评论用户名、评论内容和评论时间。
4.捕获数据
可以根据Sitemap cxk -> Scrape 的操作路径抓取数据。
5.一些问题
如果你看了我上面的教程,马上爬数据,你可能遇到的第一个问题是,300w数据,我是不是都爬下来了?
听起来很不现实。毕竟Web Scraper针对的数据量比较少,上万的数据算太多了。不管数据有多大,都要考虑爬取时间是否过长,数据如何存储,如何处理。网站的反爬系统(比如突然弹出一个验证码,这个Web Scraper无能为力)。
考虑到这个问题,如果你看过上一篇关于自动控制抓取次数的教程,你可能会想到使用 :nth-of-type(-n+N) 来控制 N 条数据的抓取。如果你尝试一下,你会发现这个方法根本行不通。
失败的原因其实涉及到一点网页知识。如果您有兴趣,可以阅读下面的说明。不感兴趣的可以直接看最后的结论。
就像我之前介绍的更多加载页面和下拉加载页面一样,它们新加载的数据会附加到当前页面。表示所有数据都在同一页面上。
当我们使用:nth-of-type(-n+N)来控制加载次数的时候,其实就是在这个网页上设置一个计数器。当数据已经累积到我们想要的数量时,就会停止爬取。
但是,对于使用寻呼机的网页,每次翻页到刷新当前网页时,都会设置一个计数器。
比如你要抓1000条数据,但是第一页只有20条数据,抓到最后一条,还有980条数据;对于一条数据,还有980,一翻页计数器就清零,又变成1000了……所以这种控制数量的方法是无效的。
所以得出的结论是,寻呼机类型的网页如果想要提前结束爬取,唯一的办法就是断网。当然,如果你有更好的解决方案,可以在评论中回复我,我们可以互相讨论。
6.总结
分页器是一种非常常见的网页分页方法。我们可以通过 Web Scraper 中的 Element click 处理此类网页,并通过断开网络来结束爬取。