Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 如何通过获取结果来抓取此ajax网站_Jquery_Python_Ajax_Python 2.7_Scrapy - Fatal编程技术网

Jquery 如何通过获取结果来抓取此ajax网站

Jquery 如何通过获取结果来抓取此ajax网站,jquery,python,ajax,python-2.7,scrapy,Jquery,Python,Ajax,Python 2.7,Scrapy,有这个网站 如果您选择一个日期并单击搜索,然后转到每日单位交易,您将获得结果 我想从scrapy那里得到结果。换句话说,从scrapy执行ajax调用 我这样做: from scrapy.spider import Spider from scrapy.http import FormRequest from scrapy.selector import Selector from scrapy.http import Request from scrapy.shell import insp

有这个网站

如果您选择一个日期并单击搜索,然后转到每日单位交易,您将获得结果

我想从scrapy那里得到结果。换句话说,从scrapy执行ajax调用

我这样做:

from scrapy.spider import Spider
from scrapy.http import FormRequest
from scrapy.selector import Selector
from scrapy.http import Request
from scrapy.shell import inspect_response
class MySpider(Spider):
    name = 'MySpider'
    start_urls = ['http://www.dubailand.gov.ae/English/pages/Daily-Transactions.aspx']
    def start_requests(self):
        for url in self.start_urls:
            yield self.make_requests_from_url(url)

    def make_requests_from_url(self, url):
        return Request(url, callback=self.parse, meta={'cookiejar': 1})

    def parse (self, response):
          return [FormRequest(url="http://www.dubailand.gov.ae/English/pages/Daily-Transactions.aspx",
                    formdata={'ctl00$ctl69$g_6ffada3a_2cbc_43a0_9034_f48a864a8873$txtDate': '30/07/2015', 'id' : 'ctl00_ctl69_g_6ffada3a_2cbc_43a0_9034_f48a864a8873_ntbSearch'},
                    callback=self.page_parse,
                    meta={'cookiejar': response.meta['cookiejar']},
                    method='POST', headers = {'X-Requested-With': 'XMLHttpRequest', 'X-MicrosoftAjax' : 'Delta=true',
                    'Accept-Encoding':'gzip, deflate'}
                    )]
    def page_parse(self,response):
        sel = Selector(response)
        import json
        with open('data.html', 'w') as outfile:
            json.dump(response.body, outfile)
        #inspect_response(response)
        pass
我启用了cookies,并进行了ajax调用。我使用google chrome f12检查了请求的标题,并将这些参数添加到标题中

但是,在单击搜索按钮之前,结果是主页


请问我犯了什么错误?

我认为您缺少一些额外的必需标题和表单参数

如果您转到Chrome的网络选项卡,右键单击Daily-Transactions.aspx请求,并选择“Copy as cURL”,您将得到以下命令(我添加了换行符以便于阅读):

如果我运行这个curl命令,我会得到正确的响应,如果我更改这个位:

txtDate=10"%"2F01"%"2F2015
致:

然后我得到第二天的数据

由于他们使用的是ASP.net,而且它不是一个其他人想要与您集成的公共API,因此无法复制站点作为AJAX请求的一部分发送的所有粗糙/怪异的参数。一方面,ASP.net使用了这种“视图状态”思想,即整个会话存储在客户端,并包含在每个请求中。这就是为什么表单数据如此庞大且看起来令人讨厌的原因

如果您的请求突然停止工作,另一件要注意的事情是它们是否设置了会话的过期时间。您可能需要向
/Daily Transactions.aspx
发出新的GET请求以获取新会话

尝试将所有的头和表单参数添加到您的scrapy请求中,它应该可以工作

最后一件事,看起来您在
page_parse
方法中使用了
json
,但此调用返回的数据不是json。它是一个“部分”HTML文档,因此您需要解析该HTML以查找数据

txtDate=10"%"2F01"%"2F2015
txtDate=11"%"2F01"%"2F2015