我试图从一个网页上获取一些数据。此网页使用.Net
。根据firebug,当我点击一个按钮时,它会发送两个请求。
POST
请求中有信息。然后有一个GET
请求获取我想要的信息。
我正在使用requests
模块。我不知道如何让这两个请求一起工作。
我试过这个:
r = requests.post("https://example.com/vyber.aspx",data=_params) # _params is a dictionary obtained from Firebug
r = requests.get("https://example.com/vyber.aspx")
print r.content
但它不起作用(返回错误的HTML
),因为这两个请求是独立的。我想我必须存储某种数据(可能是cookie或其他)来做GET
请求。但我不知道如何。
我怎么能这样做?
答案 0 :(得分:0)
我是否需要使用session。 正如文档所说 -
Session对象允许您跨越某些参数 要求。它还会在所有请求中保留cookie 会话实例,并将使用urllib3的连接池。因此,如果 您正在向同一主机(底层TCP)发出多个请求 连接将被重用,这可能会导致重大连接 性能提升(参见HTTP持久连接)。
s = requests.Session()
r = s.get('http://httpbin.org/cookies', cookies={'from-my': 'browser'})
答案 1 :(得分:0)
您还可以添加发送标头以使其真实
ses = requests.session()
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36',
}
r = ses.post("https://example.com/vyber.aspx",data=_params, headers=headers)
r = ses.get("https://example.com/vyber.aspx", headers=headers)
print r
你必须检查你的参数是否像这样{" name_in_html" :" value_you_want'} 也有时网站等待接收另一个已经具有类似
的值的参数<input type="TYPE" id="ID" name="NAME" value="SOMEVAL">
所以你必须添加{&#39; NAME&#39; :&#39; SOMEVAL&#39;}给你数据