Python分页爬取数据的分析

前言

文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

作者: 向右奔跑

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取

python免费学习资料以及群交流解答点击即可加入


对爬虫爬取数据时的分页进行一下总结。分页是爬取到所有数据的关键,一般有这样几种形式:
1、已知记录数,分页大小(pagesize, 一页有多少条记录)

  • 已知总页数(在页面上显示出总页数)
  • 页面上没有总记录数,总页数,但能从分页条中找到总页数
  • 滚动分页,知道总页数
  • 滚动分页,不知道总页数

以上前三种情况比较简单,基本上看一下加载分页数据时的地址栏,或者稍微用Chrome – network分析一下,就可以了解分页的URL。

一、页面分析,获取分页URL

典型的如豆瓣图书、电影排行榜的分页。
在这里插入图片描述
对于像以下这种分页,没有显示总记录数,但从分页条上看到有多少页的,一般的处理方法有两种:一是先把最后一页的页码抓取下来;二是一页一页的访问抓取,直到没有“下一页”。
在这里插入图片描述
二、用抓包工具,查看分页URL
在这里插入图片描述
通过抓包工具,获取了分页的URL,再进行总页数的分析,一般是进行计算,如这里,有文章总数量,每页显示的文章数(页大小),就可以计算出总页数。
看一下这个,七日热门文章的分页,比较有意思。这么一长串,是不是比较崩溃。
在这里插入图片描述
这时候一般要缩短参数,确定关键参数。分页关键的参数是page=2,直接把url减少成这样:
在这里插入图片描述
看到就是我们所需要的数据。
再回过头来理解一下,为什么采用了这样一串的URL,可以通过查看response,发现响应的是xml数据(一段网页数据),也就是这里采用了异步加载(AJAX)。
在这里插入图片描述
三、抓包分析,需要构造分页URL

这时候,通过抓包分析,还不能获取分页的URL。有时候是抓包到的URL直接放到地址栏也查看不到所要的分页数据,还有时候是分页的URL中有其他参数。

如简书用户“动态”数据分页url,抓包到的是
在这里插入图片描述
这里就要了解如何获取max_id这个值。还有一个问题就是要判断是否到了最后一页。
如简书“投稿请求”数据的分页:
在这里插入图片描述
从抓包拿到的分页URL,访问时发现看到的不是我们所要的页面、数据。这时就是根据经验进行分析。基本方法还是结合网页源代码,查看chrome中的response。

### 设计分页爬取数据的架构 在设计用于分页爬取数据的架构时,需考虑多个方面以确保效率和可扩展性。以下是关于最佳实践的设计方案: #### 1. **Scrapy框架的选择** Scrapy 是一种强大的 Python 爬虫框架,支持异步请求处理以及内置反爬机制应对策略[^1]。这使得它非常适合于大规模的数据抓取任务。 #### 2. **Yield 的使用** 为了优化内存占用,在 Scrapy 中推荐使用 `yield` 关键字返回解析后的数据项。这种方式允许逐条传递数据而无需一次性加载整个页面的内容到内存中,从而提高性能并减少资源消耗[^2]。 #### 3. **Spiders 文件夹结构** 通常会在项目的 spiders 子目录下定义具体的爬虫逻辑,并通过初始化文件 (`__init__.py`) 来管理这些模块之间的依赖关系[^3]。这种组织方式有助于保持代码清晰度与维护便利性。 #### 4. **URL 参数动态生成** 对于涉及多页数目的网站来说,可以通过修改 URL 查询参数(如 page= 或 offset= 字段)实现自动化翻页操作。例如: ```python def parse(self, response): items = self.parse_items(response) next_page_url = response.css('a.next-page::attr(href)').get() if next_page_url is not None: yield scrapy.Request(next_page_url, callback=self.parse) def parse_items(self, response): for item in response.css('div.item'): yield { 'title': item.css('h2.title::text').get(), 'link': item.css('a::attr(href)').get(), } ``` 上述示例展示了如何利用 CSS Selectors 提取消息列表中的每一条记录,并判断是否存在下一页链接以便继续访问其他页面。 #### 5. **分布式部署考量** 尽管大多数应用场景可通过单机版或多线程版本满足需求,但在面对极其庞大的数据集或者高并发环境时,则可能需要引入分布式计算模型来提升吞吐能力[^4]。不过需要注意的是,实际开发过程中应权衡复杂性和收益后再决定是否采用此类高级特性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值