我正在尝试对印度政府Public Data Portal的数据进行网络抓取。首先,我需要提交一个表格以获取数据。
在上图中,您可以看到表单的屏幕截图。该表格可让您选择印度内的州,州内的地区,地区内的街区和街区内的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的信息,但出现错误。下图显示了网络活动。
我的代码:
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/