python - 无法使用 Python 请求复制 AJAX
问题描述
我正在尝试从网页(https://droughtmonitor.unl.edu/Data/DataTables.aspx)复制 ajax 请求。当我们从下拉列表中选择值时启动 AJAX。
我正在使用 python 使用以下请求,但无法在浏览器的网络选项卡中看到响应。
import bs4
import requests
import lxml
ses = requests.Session()
ses.get('https://droughtmonitor.unl.edu/Data/DataTables.aspx')
headers_dict = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
}
url = 'https://droughtmonitor.unl.edu/Ajax2018.aspx/ReturnTabularDMAreaPercent_urban'
req_data = {'area':'00064', 'statstype':'1'}
resp = ses.post(url,data = req_data,headers = headers_dict)
soup = bs4.BeautifulSoup(resp.content,'lxml')
print(soup)
解决方案
您需要在请求中添加几项内容才能从服务器获得答复。
- 您需要将 to 转换
dict
为json
字符串而不是dict
. - 您还需要
request-data
通过将请求标头设置为来指定类型Content-Type:application/json; charset=utf-8
通过这些更改,我能够请求正确的数据。
import bs4
import requests
ses = requests.Session()
ses.get('https://droughtmonitor.unl.edu/Data/DataTables.aspx')
headers_dict = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36',
'Content-Type': 'application/json; charset=utf-8'}
url = 'https://droughtmonitor.unl.edu/Ajax2018.aspx/ReturnTabularDMAreaPercent_urban'
req_data = json.dumps({'area':'00037', 'statstype':'1'})
resp = ses.post(url,data = req_data,headers = headers_dict)
soup = bs4.BeautifulSoup(resp.content,'lxml')
print(soup)
我必须说一个相当棘手的问题。
推荐阅读
- jms - 通过 JMS 从 Weblogic 到 MQ 的访问队列问题。完成代码“2”,原因“2085”
- reactjs - 如何对 Formik 中包装的 Material UI Texfield 进行单元测试?
- python - 在 django 模板中使用 with 和 if 同时
- google-chrome-extension - 如何在 devtools 中检查 Chrome 扩展内容脚本的源代码?
- java - 如何将捆绑从一个活动传递到放置在另一个活动中的片段?
- sql - 日期间隔过滤器
- css - Bootstrap 4总是折叠div
- c# - 如何在 C# 中按列表分组
- magento2 - Magento 2 同时重新索引 INSERT INTO 'catalog_category_product_index_store1' 卡住了查询
- sql - 将 nvarchar 值转换为 Decimal 或 Numeric 数据类型?