【发布时间】:2016-03-28 13:28:33
【问题描述】:
我一直在尝试使用 python 请求模块通过http://dq.ndc.bsnl.co.in/bsnl-web/residentialSearch.seam 上的表单页面。
我猜测的问题是表单字段中的 AJAX。而且我真的不知道如何使用 Python Requests 发送请求。 我知道这可以通过 Selenium 来完成,但我需要通过请求来完成。
这是我当前的代码:
import requests
headers = {'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:27.0) Gecko/20100101 Firefox/27.0'
}
payload = {
"residential": "residential",
"residential:j_id12": "",
"residential:firstField": 'a',
"residential:criteria1": "3",
"residential:city": "ASIND",
"residential:button1": "residential:button1",
"residential:suggestionBoxId_selection": "",
"javax.faces.ViewState": "j_id1"
}
with requests.Session() as s:
# print s.headers
print s.get('http://dq.ndc.bsnl.co.in/bsnl-web/residentialSearch.seam')
print s.headers
print s.cookies
resp = s.post(
'http://dq.ndc.bsnl.co.in/bsnl-web/residentialSearch.seam',
data=payload, headers=headers)
print resp.text
【问题讨论】:
-
“过去”是什么意思?如果在浏览器中查看,它会重定向你吗?
-
嗯,是的.. 通过过去我的意思是在表单提交后进入下一页。我似乎无法通过请求来做到这一点。我不明白我应该将哪些参数传递给表单。
-
IIRC 由于浏览器中的重定向而发生。 HTTP 请求是按每个请求的请求发送的。如果他们想要你,你不会自动要求更多。一旦你克服了这一点并成功了,试着在你的浏览器中完成这个过程,看看需要哪些标头和 cookie 来单独请求下一页。然后是下一个,然后是下一个。
-
我已经这样做了。我的会话中也有一个 cookie。这就是我通常将表单提交到页面的方式。这个唯一的问题似乎是表单中的 AJAX。表单操作 POST 到 dq.ndc.bsnl.co.in/bsnl-web/residentialSearch.seam。但那是我还不能开始工作的部分。不过,同样的逻辑适用于大多数其他网站。这个有什么问题?
-
我不确定!也许其他人会来。我会投票赞成这个问题
标签: python ajax web-scraping python-requests