Jquery 如何通过获取结果来抓取此ajax网站
有这个网站 如果您选择一个日期并单击搜索,然后转到每日单位交易,您将获得结果 我想从scrapy那里得到结果。换句话说,从scrapy执行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
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