抓取使用ajax的网页

2024-06-26 12:57:24 发布

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

我正在尝试从一个印度政府的网络垃圾数据。首先我需要提交一个表格来获取数据。enter image description here

在上面的图片中,您可以看到表单的屏幕截图。该表单允许您选择印度的州、州内的地区、地区内的区块和区块内的panchayats。上图中,安达曼和尼科巴是一个州,尼科巴是一个区,坎贝尔湾是一个街区,戈文德纳加尔是一个班查雅特。在

我需要收集所有班查亚特的资料。提交表单时发送的表单数据包含已选择的所有panchayat复选框的值。有超过250000个班查亚特人,几乎不可能手工完成。因此,我使用beauthoulsoup来解析表单的html元素,以获得所有panchayat的复选框的值。但是当页面被加载时,关于panchayat级别的信息不会被加载。当每个块展开时,页面在http://nregarep2.nic.in/netnrega/dynamic2/DynamicReport_new4.aspx/getGPs执行ajax post。它获取关于panchayat的信息,然后将其呈现到页面上。在

现在,我试图模拟ajax post来获取关于panchayats的信息,但是我得到了一个错误。下图显示了网络活动。enter image description here

我的代码:

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)

我得到:

^{pr2}$

我已经用不同的项目组合更改了请求头中的请求头,但没有运气。在


Tags: in信息http表单页面postheadersnic
1条回答
网友
1楼 · 发布于 2024-06-26 12:57:24

您需要在现有脚本中稍作修改才能获得响应。请尝试data=json.dumps(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

结果如下:

^{pr2}$

相关问题 更多 >