Python请求不起作用

2024-06-26 13:50:27 发布

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

我正在尝试分析此页的搜索结果: https://entp.hud.gov/idapp/html/condlook.cfm

import requests
payload = {
    'fapproval_method':'NEW',
    'fsorted_by':'condo_name',
    'fstate':'WA',
    'fcountry':'',
    'fcondo_id':'',
    'fcondo_name':'',
    'fcity':'',
    'fzip':'',
    'fstatus_code':'A',
    'fsearch_type':'B',
    'fbegin_mo':'',
    'fbegin_dy':'',
    'fbegin_yr':'',
    'fend_mo':'',
    'fend_dy':'',
    'fend_yr':'',
    'came_from':'oth',
    'in_fhac':'true'
}

r = requests.post('https://entp.hud.gov/idapp/html/condlook.cfm', data=payload)
print(r.text)

我试着替换condlook.cfm公司共管1.cfm,但无效。它只返回预先填充值的同一页,而不是结果页。在


Tags: namehttpshtmlrequestsgovpayloadmohud
1条回答
网友
1楼 · 发布于 2024-06-26 13:50:27

首先,正如@MartijnPieters所评论的,您需要发布到condo1.cfm,因为表单就是在那里发布的。其次,使用requests.Session()允许第一页(condlook.cfm)设置CFID和{}cookies。您必须指定referer,因为显然condo1.cfm有一些逻辑可以不返回没有referer集的结果。最后,您的payload中有一个拼写错误:fcountry必须是fcounty。在

import requests
s = requests.Session()

s.get("https://entp.hud.gov/idapp/html/condlook.cfm")

s.headers["Referer"] = "https://entp.hud.gov/idapp/html/condlook.cfm"


payload = {
    'fapproval_method':'NEW',
    'fsorted_by':'condo_name',
    'fstate':'WA',
    'fcounty':'',
    'fcondo_id':'',
    'fcondo_name':'',
    'fcity':'',
    'fzip':'',
    'fstatus_code':'A',
    'fsearch_type':'B',
    'fbegin_mo':'',
    'fbegin_dy':'',
    'fbegin_yr':'',
    'fend_mo':'',
    'fend_dy':'',
    'fend_yr':'',
    'came_from':'oth',
    'in_fhac':'true'
}
r = s.post("https://entp.hud.gov/idapp/html/condo1.cfm", data=payload)
print r.text

值得一提的是,我使用Chrome的网络检查器并查看HTTP请求头来解决这个问题。我怀疑User-Agent是必需的(一些站点寻找一个“常规浏览器”),但是在这个例子中{}是必需的。在

相关问题 更多 >