Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Scrapy-基于HTTP状态代码动态构建URL?_Python_Scrapy_Web Crawler_Scrapy Spider_Dynamic Url - Fatal编程技术网

Python Scrapy-基于HTTP状态代码动态构建URL?

Python Scrapy-基于HTTP状态代码动态构建URL?,python,scrapy,web-crawler,scrapy-spider,dynamic-url,Python,Scrapy,Web Crawler,Scrapy Spider,Dynamic Url,我刚刚开始学习Scrapy,我阅读了教程,但我遇到了一个问题,要么我在教程和/或文档中找不到答案,要么我已经阅读了多次答案,但我只是没有正确理解 情景: 假设我有一个网站,我想爬。根据url中传递的查询参数动态呈现内容。我需要根据“类别”的URL pram刮取3组数据 我需要的所有信息都可以从公共基本URL抓取,如下所示: “” 每个类别的URL如下所示: “” “” “” 这里需要注意的一点是,该站点在每个初始请求中只加载30个结果。如果用户想要查看更多内容,他们必须单击底部的“加载更多结果…

我刚刚开始学习Scrapy,我阅读了教程,但我遇到了一个问题,要么我在教程和/或文档中找不到答案,要么我已经阅读了多次答案,但我只是没有正确理解

情景:

假设我有一个网站,我想爬。根据url中传递的查询参数动态呈现内容。我需要根据“类别”的URL pram刮取3组数据

我需要的所有信息都可以从公共基本URL抓取,如下所示:

“”

每个类别的URL如下所示:

“”

“”

“”

这里需要注意的一点是,该站点在每个初始请求中只加载30个结果。如果用户想要查看更多内容,他们必须单击底部的“加载更多结果…”按钮。在对这一点进行研究之后,在页面的初始加载期间,只会请求前30名(这是有意义的),并且在单击“加载更多…”按钮之后,URL会被更新为附加了“pagex=2”,容器会刷新30个以上的结果。在这之后,按钮消失,当用户继续向下滚动页面时,会向服务器发出后续请求以获得接下来的30个结果,“pagex”值增加1,容器刷新并添加结果,冲洗并重复

我不太清楚如何处理网站上的分页,但我提出的最简单的解决方案是找出每个类别的最大“pagex”数,然后将URL设置为该数字,以供初学者使用

例如,如果在浏览器中传递URL:

“”

接收HTTP响应代码200,并将所有结果呈现到页面。伟大的这就是我所需要的

但是,假设下周左右,又增加了50个项目,所以现在最大值是“…pagex=24”,我不会得到所有最新的

或者如果删除了50个项目,新的最大值为“…pagex=20”,我将在请求“22”时得到404响应

我想发送一个带有最后一个已知的“good”最大页码的测试响应,并根据提供的HTTP响应,使用该响应来决定URL是什么

所以,在我开始任何爬行之前,我想在“pagex”中添加1并检查404。如果404我知道我仍然很好,如果我得到了200,我需要继续加1,直到我得到404,这样我就知道max在哪里(或者如果需要的话减少)

我似乎不知道我是否可以用Scrapy来做这件事,当然我必须先用另一个模块来运行这个检查。我尝试在“parse”和“start_requests”方法中添加用于测试目的的简单检查,但没有成功。start_请求似乎无法处理响应,parse可以检查响应代码,但不会按照指示更新URL

我确信这是我糟糕的编码技能(对这一切来说还是新鲜事),但我似乎找不到可行的解决方案


非常感谢您的任何想法或想法

您可以在scrapy中配置要配置的状态,这样您就可以根据
响应状态在
parse
方法中做出决策。检查如何在中处理状态。例如:

class MySpider(CrawlSpider):
    handle_httpstatus_list = [404]

感谢您的回复,并对延迟表示抱歉!我暂时把我在网站爬行方面的小实验推迟到其他项目上。今晚我会在这里测试你的建议,如果它确实有效,我会把它作为答案。我很好奇你是否能提供你对我的“战略”的总体想法。考虑到我要做的事情,以及面临的具体挑战,你会认为这是一种可以接受的克服这个问题的方法,还是建议一种不同的方法?