我正在抓取一个带有一个表单的asp.net页面,其中包含多个具有不同选项的选择标签。每个select标签都附带一个JavaScript函数,每次选择不同的值时都会触发该函数。该JS函数执行一个AJAX调用,该调用返回类似于JSON的文本响应,但它是文本。
这是
51.772425 | 0.00 | 21.33 | 0.00 | 5000 | 51.772425 | 0
我想用Scrapy拦截它,但是我没有得到这一小段字符串,而是获得了整个页面。
'NJGroup123390'这是选择标记的ID
这是我的代码:
def after_login(self, response):
return Request(url='https://****.com/NexJobPage.asp?Id=445',
callback=self.parse_form)
def parse_form(self, response):
return [FormRequest.from_response(response,
formdata={'NJGroup123390':'5000'},
dont_click=True,
callback=self.parse_form2)]
# here I should have the response returned by AJAX: 51.772425|0.00|21.33|0.00|5000|51.772425|0
def parse_form2(self, response):
f = open('logo2', 'wb')
f.write(response.body)
f.close()
由于
答案 0 :(得分:0)
您可能错过了通过javascript添加的其他参数或标头。检查浏览器中发送的请求,检查缺少的参数,标题或cookie,并将它们添加到请求对象中。
您可以使用shell查看FormRequest
填充的数据:
$ scrapy shell https://stackoverflow.com/users/signup
2014-02-12 19:38:12-0400 [scrapy] INFO: Scrapy 0.22.1 started (bot: scrapybot)
...
In [1]: from scrapy.http import FormRequest
In [2]: req = FormRequest.from_response(response, formnumber=1)
In [3]: import urlparse
In [4]: urlparse.parse_qs(req.body, True)
Out[4]:
{'display-name': [''],
'email': [''],
'fkey': ['324799e03d5f73e1af72134e6d943f58'],
'password': [''],
'password2': [''],
'submit-button': ['Sign Up']}