Python 请求无效

Python requests not working

我正在尝试解析此页面的搜索结果: 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)

我尝试用 condo1.cfm 替换 condlook.cfm 但无济于事。它只是 returns 具有预填充值的同一页面,而不是结果页面。

首先,正如@MartijnPieters 评论的那样,您需要从 post 到 condo1.cfm,因为那是表单 post 的位置。其次,使用 requests.Session() 允许第一页 (condlook.cfm) 设置 CFIDCFTOKEN cookie。您必须指定引荐来源网址,因为显然 condo1.cfm 有一些逻辑在没有引荐来源网址设置的情况下不会 return 结果。最后,您的 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 请求 headers 弄清楚了这一点。我怀疑 User-Agent 是必需的(有些网站寻找 'regular browser'),但结果在这种情况下 Referrer 是必需的。