我正在尝试从此页面解析搜索结果: 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,但无济于事。它只返回具有预先填充的值的相同页面,而不是结果页面。
答案 0 :(得分:0)
首先,正如@MartijnPieters所评论的那样,您需要发布到condo1.cfm
,因为这是表单发布的地方。其次,使用requests.Session()
允许第一页(condlook.cfm
)设置CFID
和CFTOKEN
Cookie。您必须指定引用者,因为显然condo1.cfm
有一些逻辑在没有引用者设置的情况下不返回结果。最后,您的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
是必需的(有些网站会寻找'常规浏览器')但事实证明,Referrer
是必需的。