我试图做一个POST请求发送到以下页面进行POST请求:http://search.cpsa.ca/PhysicianSearchPython的使用Python 3的urllib
为了模拟点击“搜索”按钮,没有填写任何表格,这将数据添加到页面。通过在Chrome开发人员工具中查看网络选项卡时单击该按钮,我可以获得POST标题信息。我发布这个的原因,而不是从其他类似问题复制解决方案是我相信我可能没有得到正确的标题信息。格式正确吗?我是否抓取了正确的信息?我从未做过POST请求。
这是我已经成功地拼凑:
import urllib.parse
import urllib.request
data = urllib.parse.urlencode({'Host': 'search.cpsa.ca', 'Connection': 'keep-alive', 'Content-Length': 23796,
'Origin': 'http://search.cpsa.ca', 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Cahce-Control': 'no-cache', 'X-Requested-With': 'XMLHttpRequest',
'X-MicrosoftAjax': 'Delta=true', 'Accept': '*/*',
'Referer': 'http://search.cpsa.ca/PhysicianSearch',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'en-GB,en-US;q=0.8,en;q=0.6',
'Cookie': 'ASP.NET_SessionId=kcwsgio3dchqjmyjtwue402c; _ga=GA1.2.412607756.1459536682; _gat=1'})
url = "http://www.musi-cal.com/cgi-bin/query?%s"
data = data.encode('ascii')
with urllib.request.urlopen("http://search.cpsa.ca/PhysicianSearch", data) as f:
print(f.read().decode('utf-8'))
该解决方案输出页面的HTML,但不与任何我想从POST请求检索数据。
POST数据应该对应于您提交表单的输入元素的名称属性和值。您可以通过检查表单的html来获取名称属性。您将请求标头用作POST数据 - 这是行不通的。另外,请考虑使用请求包(http://docs.python-requests.org/en/master/),它比urllib2更友好。 – snakecharmerb
如何指定表单?或者我只需要指定数据的键值对? –
在chrome中,查看网络选项卡中的POST请求,就像您之前所做的一样,并转至标题选项卡的底部 - 您将看到名称和值,无论它是POST请求还是具有查询参数的GET请求 – snakecharmerb