如何在改变元素状态后处理ajax响应?

时间:2014-02-11 20:16:01

标签: python asp.net ajax scrapy

我正在抓取一个带有一个表单的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()

由于

1 个答案:

答案 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']}