python - 带有视图状态的 Scrapy 递归抓取顺序
问题描述
我正在尝试使用 Scrapy 以递归方式抓取使用 ViewStates 构建的网站的搜索结果。所以我从一组关键字开始,通常只有两个:
key1, key2
然后每个关键字都有可能生成更多的关键字,以及返回需要解析的多页结果。这是通过蜘蛛parse
函数的条件分支完成的,它产生scrapy.FormRequest
带有新关键字或“下一页”指令的对象。
我的问题是订购。虽然 scrapy 声称它可以通过选项强制进入深度优先顺序,但'CONCURRENT_REQUESTS': 1
这种递归爬行似乎并非如此。到目前为止,我一直看到在解析原始键时生成的任何新请求都发生在整个原始请求集之后。所以如果key1
首先执行并产生一个新的请求key1.1
,执行顺序是
key1
key2
key1.1
在我的特定用例中,这适用于新关键字,但该站点不会处理“下一页”请求,除非它们立即跟随第 1 页的请求。这使得 scrapy 在功能上对我毫无用处,除非我能弄清楚如何强制执行这些请求的抓取顺序。优先级似乎也没有任何效果。
谁能给我这方面的指导?这是否超出了 Scrapy 的设计范围?
解决方案
kwargpriority=
旨在影响调度程序,以允许您通知 Scrapy 您的要求
默认情况下,所有Request
s 具有相同的优先级,因此 Scrapy 只选择一个;但是,由于您需要立即执行下一页操作,因此您希望给它一个priority=1000
,这可以通过response.follow(next_page_url, priority=1000)
或者,当然,通过手动创建下一页Request
和yield
/return
来完成
推荐阅读
- json - 如何在同一包中的 javascript 代码中获取 JSON 值?
- mysql - In a table of multiple invoices per client, I want to identify the first invoice (row) for each client
- xml - Removing the stylesheet from an XML file
- python - microphyton:使用 lib 机器的错误状态 1
- python-3.x - 加载数据时出现内存问题
- javascript - 如何获取从周一到周日的工作日列表 momentjs
- django - 如何在变量中使用 jinja 变量
- django - Django将数据加载到模型
- amazon-web-services - AWS Quicksight:如何使用 SQL(数据集)中的参数值在仪表板上呈现动态数据?
- spring - 如何通过spring websocket STOMP向特定订阅发送消息?