我有以下问题:
我的刮板从一个“基本”网址开始。此页面包含一个下拉列表,该下拉列表通过 ajax 调用创建另一个下拉列表,并且级联 2-3 次,直到它具有到达我要抓取的实际内容所在的“最终”页面所需的所有信息。
我没有点击任何东西(并且必须使用 Selenium 或类似的东西),而是使用页面暴露的 JSON API 来模仿这种行为,所以我没有点击下拉菜单,而是简单地发送一个请求并读取包含用于生成下一个信息数组的 JSON 响应下拉列表的内容,并执行此操作,直到我获得一个项目的最终 URL。此 URL 将我带到我想要实际解析的最终项目页面。
我对如何使用 Scrapy 获取下拉框的每个组合的“最终”网址感到困惑。我使用 urllib 编写了一个爬虫,它使用了大量的循环来遍历 url 的每个组合,但 Scrapy 似乎有点不同。我放弃了 urllib 和 lxml,因为 Scrapy 似乎是一个更易于维护的解决方案,它更容易与 Django 项目集成。
本质上,我试图强制 Scrapy 在读取 json 响应的内容时采用我生成的特定路径,并且只真正解析链中的最后一页以获取真实内容。它需要为每个可能的页面执行此操作,并且我希望将其并行化,以使事情变得高效(并使用 Tor,但这些是以后的问题)。
我希望我已经很好地解释了这一点,如果您有任何问题,请告诉我。非常感谢你的帮助!
编辑:添加了一个例子
[base url]/?location=120§ion=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§ion=240&department_id=62
返回:
<courses>
<course id="1" name="name 1"/>
<course id="2" name="name 2"/>
</courses>
这种情况一直持续到我最终得到列表的实际链接。
这基本上就是页面上的样子(尽管在我的情况下,表单上有一个最终的“提交”按钮,可以将我发送到我想要解析的实际列表): http ://roshanbh.com.np /落下/
因此,我需要某种方式来抓取下拉列表的每个组合,以便获得所有可能的列表页面。遍历 ajax xml 响应以生成最终列表 URL 的中间步骤让我很困惑。