【发布时间】:2019-02-21 01:40:33
【问题描述】:
我正在使用 Scrapy 在 python 中编写脚本,以便使用身份验证从网站上抓取数据。
我正在抓取的页面真的很痛苦,因为主要是用 javascript 和 AJAX 请求制作的。页面的所有正文都放在<form> 中,允许使用submit 按钮更改页面。 URL 不变(它是一个 .aspx)。
我已经成功地从第一页抓取了我需要的所有数据,然后使用此代码单击此输入按钮更改页面:
yield FormRequest.from_response(response,
formname="Form",
clickdata={"class":"PageNext"},
callback=self.after_login)
after_login 方法正在抓取数据。
但是,在单击具有onclick 属性的容器后,我需要出现在另一个 div 中的数据。我需要执行一个循环,以便单击每个容器、显示数据、抓取它们,然后我将转到下一页并执行相同的过程。
问题是我找不到如何制作“脚本”只需使用 Selenium 单击容器的过程(登录时,如果没有,我无法访问此页面)然后 Scrapy 正在抓取数据在发出 XHR 请求之后。
我在互联网上做了很多研究,但无法尝试任何解决方案。
谢谢!
【问题讨论】:
-
您是否已将 Selenium 集成到您的项目中(即使只是部分集成)?处理 Javascript 的另一种方法是使用 Scrapy Splash。
-
另外,您是否调查过这些容器中的每一个是否都执行 Web 请求?就像一个正确的 API 调用,甚至只是返回一个 HTML sn-p?还是他们只是切换已经加载的内容?
-
确实有一个表单发送数据来做AJAX请求。我已成功找到表单数据和 ID 值来执行 FormRequest,但数据显示在仅使用 Javascript 出现的弹出窗口中。也许表单正在发送要在某处显示的数据,例如 .json 格式,但我真的不知道在哪里看。关于 Splash,您是否有使用 Scrapy Splash 请求来模拟 onclick 行为的教程?谢谢!
-
不能 Scrapy 执行 javascript 函数并且只更新它得到响应的 html 正文?
-
Scrapy 只获取数据。如果您手动触发的 AJAX 表单提交返回 JSON,您当然可以解析它。但它不会运行任何 Javascript 来更新页面。您可以使用浏览器的 Inspector 工具 (Firefox/Chrome) 检查表单提交请求。 Here is a tutorial 来自创建 Splash 的公司。 here is a guide 使用浏览器的开发工具检查请求。