gpt4 book ai didi

jquery - 抓取使用ajax的网页

转载 作者:太空宇宙 更新时间:2023-11-04 04:51:38 25 4
gpt4 key购买 nike

我正在尝试从印度政府网络抓取数据 Public Data Portal .首先我需要提交一个表单来获取数据。 enter image description here

在上图中你可以看到表格的截图。该表格允许您选择印度内的邦、邦内的地区、地区内的街区和街区内的村委会。上图中,Andaman and Nicobar 是一个州,Nicobar 是一个区,Campbell Bay 是一个街区,Govindnagar 是一个 panchayat。

我需要收集所有 panchayats 的数据。提交表单时发送的表单数据包含已选中的所有 panchayat 的复选框的值。有超过250,000 panchayats 和人工几乎是不可能的。所以,我使用beautifulsoup来解析表单的html元素来获取所有panchayat的复选框的值。但是当页面加载时,并没有加载有关panchayat级别的信息。该页面在 http://nregarep2.nic.in/netnrega/dynamic2/DynamicReport_new4.aspx/getGPs 执行 ajax 发布当每个 block 展开时。它获取有关 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)

我得到:

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

我已经用请求 header 中存在的项目的各种组合更改了 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com