我正在使用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请求之后。
我在互联网上做了很多研究,但无法尝试任何解决方案。
谢谢!
答案 0 :(得分:0)
好吧,按照@malberts的建议,我几乎满足了我的需求。 我使用了这种代码来获取Ajax响应请求:
yield scrapy.FormRequest.from_response(
response=response,
formdata={
'param1':param1value,
'param2':param2value,
'__VIEWSTATE':__VIEWSTATE,
'__ASYNCPOST':'true',
'DetailsId':'123'},
callback=self.parse_item)
def parse_item(self, response):
ajax_response = response.body
yield{'Response':ajax_response}
假定响应为HTML。问题是响应与我通过Chrome Dev Tools查找响应请求时的响应不完全相同。我还没有考虑所有表单数据(〜10/25),即使它们根据id不变也需要所有表单数据吗?
谢谢!