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
) 设置 CFID
和 CFTOKEN
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
是必需的。
我正在尝试解析此页面的搜索结果: 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
) 设置 CFID
和 CFTOKEN
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
是必需的。