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

2024-06-16 08:26:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我在爬树asp.net包含一个表单的页面,其中包含多个具有不同选项的select标记。每个select标记都附带了一个JavaScript函数,每次选择不同的值时都会触发该函数。JS函数执行一个AJAX调用,该调用返回一个类似于JSON的文本响应,但它是文本。你知道吗

给你

51.772425|0.00|21.33|0.00|5000|51.772425|0

我想用Scrapy截取它,但是我没有得到这一小段字符串,而是得到了整个页面。你知道吗

'NJGroup123390'是select标签的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()

谢谢


Tags: 函数标记文本selfformreturnparseresponse
1条回答
网友
1楼 · 发布于 2024-06-16 08:26:45

您可能缺少通过javascript添加的附加参数或头。检查浏览器中发送的请求,检查缺少的参数、标头或cookies,并将它们添加到请求对象中。你知道吗

您可以使用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']}

相关问题 更多 >