我正在尝试对印度政府Public Data Portal的数据进行网络抓取。首先,我需要提交一个表格以获取数据。 jquery - 搜寻使用Ajax的网页-LMLPHP

在上图中,您可以看到表单的屏幕截图。该表格可让您选择印度内的州,州内的地区,地区内的街区和街区内的panchayat。在上图中,安达曼(Andaman)和尼科巴(Nicobar)是州,尼科巴(Nicobar)是区,坎贝尔湾(Campbell Bay)是一个街区,戈文德纳加尔(govindnagar)是Panchayat。

我需要收集所有panchayat的数据。提交表单时发送的表单数据包含已选中的所有panchayat复选框的值。有超过25万个panchayats,几乎不可能手动完成。因此,我使用beautifulsoup来解析表单的html元素,以获取所有panchayat复选框的值。但是,在加载页面时,不会加载有关panchayat级别的信息。扩展每个块时,页面在http://nregarep2.nic.in/netnrega/dynamic2/DynamicReport_new4.aspx/getGPs处执行ajax发布。它获取有关panchayat的信息,然后将其呈现到页面上。

现在,我试图模拟ajax发布以获得有关panchayats的信息,但出现错误。下图显示了网络活动。 jquery - 搜寻使用Ajax的网页-LMLPHP

我的代码:

import requests
s = requests.session()
request_headers = {
    'Host': 'nregarep2.nic.in',
    'Connection': 'keep-alive',
    'Content-Length': '46',
    'Accept': 'application/json, text/javascript, */*; q=0.01',
    'Origin': 'http://nregarep2.nic.in',
    'X-Requested-With': 'XMLHttpRequest',
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36',
    'Content-Type': 'application/json; charset=UTF-8',
    'Referer': 'http://nregarep2.nic.in/netnrega/dynamic2/dynamicreport_new4.aspx',
    'Accept-Encoding': 'gzip, deflate',
    'Accept-Language': 'en-US,en;q=0.9'
}

payload = {'state_code':'01', 'block_code':'0102003', 'year':'2013'}

getGPs = s.post('http://nregarep2.nic.in/netnrega/dynamic2/DynamicReport_new4.aspx/getGPs', data=payload, headers = request_headers)

print(getGPs.text)


我得到:

{"Message":"There was an error processing the request.","StackTrace":"","ExceptionType":""}


我已经更改了request_headers,使请求标头中存在的项目具有各种组合,但是没有运气。

最佳答案

您需要对现有脚本进行一些更改以获得响应。尝试使用data=json.dumps(payload)代替data=payload,如下所示:

import json
payload = {'state_code':'01', 'block_code':'0102003', 'year':'2013'}

getGPs = s.post('http://nregarep2.nic.in/netnrega/dynamic2/DynamicReport_new4.aspx/getGPs', data=json.dumps(payload), headers = request_headers)

#notice the payload parameter in the post request


它产生以下结果:

{"d":"{\"0102003001\":\"GOVINDNAGAR\",\"0102003002\":\"CAMPBELL BAY\",\"0102003003\":\"LAXMI NAGAR\",\"0102003004\":\"Great & Little Nicobar\"}"}

关于jquery - 搜寻使用Ajax的网页,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48176377/

10-11 19:30