Python请求不起作用

时间:2015-03-25 21:35:38

标签: python python-requests

我正在尝试从此页面解析搜索结果: 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,但无济于事。它只返回具有预先填充的值的相同页面,而不是结果页面。

1 个答案:

答案 0 :(得分:0)

首先,正如@MartijnPieters所评论的那样,您需要发布到condo1.cfm,因为这是表单发布的地方。其次,使用requests.Session()允许第一页(condlook.cfm)设置CFIDCFTOKEN 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是必需的。