gpt4 book ai didi

python - 解析 ajax 响应以检索 Scrapy 中的最终 url 内容?

转载 作者:太空宇宙 更新时间:2023-11-04 06:13:43 24 4
gpt4 key购买 nike

我有以下问题:

我的抓取工具从“基本”URL 开始。此页面包含一个下拉菜单,该下拉菜单通过 ajax 调用创建另一个下拉菜单,并且此级联 2-3 次,直到它具有到达我想要抓取的实际内容所在的“最终”页面所需的所有信息。

我没有点击东西(并且必须使用 Selenium 或类似的东西),而是使用公开 JSON API 的页面来模仿这种行为,所以我没有点击下拉菜单,而是简单地发送一个请求并读取包含用于的信息数组的 JSON 响应生成下一个下拉列表的内容,并执行此操作,直到我获得一个项目的最终 URL。此 URL 将我带到我想要实际解析的最终项目页面。

我对如何使用 Scrapy 获取每个下拉框组合的“最终”URL 感到困惑。我使用 urllib 编写了一个爬虫,它使用大量循环来遍历每个 url 组合,但 Scrapy 似乎有点不同。我放弃了 urllib 和 lxml,因为 Scrapy 似乎是一个更易于维护的解决方案,更容易与 Django 项目集成。

本质上,我试图强制 Scrapy 采用我在阅读 json 响应内容时生成的特定路径,并且只真正解析链中的最后一页以获取真实内容。它需要为每个可能的页面执行此操作,我很乐意将其并行化以提高效率(并使用 Tor,但这些是以后的问题)。

希望我已经解释清楚了,如果您有任何问题,请告诉我。非常感谢您的帮助!

编辑:添加示例

[base url]/?location=120&section=240

返回:

<departments>
<department id="62" abrev="SIG" name="name 1"/>
<department id="63" abrev="ENH" name="name 2"/>
<department id="64" abrev="GGTH" name="name 3"/>
...[more]
</departments>

然后我获取部门 ID,像这样将它添加到 url 中:

[base url]/?location=120&section=240&department_id=62

返回:

<courses>
<course id="1" name="name 1"/>
<course id="2" name="name 2"/>
</courses>

这一直持续到我最终得到列表的实际链接。

这基本上就是它在页面上的样子(尽管在我的例子中,表单上有一个最终的“提交”按钮,可以将我发送到我想要解析的实际列表): http://roshanbh.com.np/dropdown/

因此,我需要某种方式来抓取下拉菜单的每个组合,以便获得所有可能的列表页面。遍历 ajax xml 响应以生成最终列表 URL 的中间步骤让我一头雾水。

最佳答案

您可以使用从主回调函数开始的回调函数链,假设您正在实现一个扩展 BaseSpider 的爬虫,像这样编写您的解析函数:

...

def parse(self, response):
#other code
yield Request (url=self.baseurl, callback=self.first_dropdown)

def first_dropdown (self, response):
ids=self.parse_first_response() #Code for parsing the first dropdown content
for (i in ids):
req_url=response.url+"/?location="+i
yield Request (url=req_url, callback=self.second_dropdown)

def second_dropdown (self, response):
ids=self.parse_second_response() #Code for parsing the second dropdown contents
url=self.base_url
for (i in ids):
req_url=response.url+"&section="+i
yield Request (url=req_url, callback=self.third_dropdown)

...

最后一个回调函数将包含提取数据所需的代码。

请注意,您要求尝试所有可能的输入组合,这可能会导致您很快收到大量请求。

关于python - 解析 ajax 响应以检索 Scrapy 中的最终 url 内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17139602/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com