作为网络抓取的初学者,我正在按照本教程进行操作: https://brennan.io/2016/03/02/logging-in-with-requests/
关于如何抓取需要登录/会话cookie的网站。上面建议在POST到登录页面时只需要隐藏的输入。
所以这就是我最终得到的代码:
import requests, lxml.html
URL = 'https://www.mypage.com/login'
#GET PAGE
s = requests.session()
login = s.get(URL)
login_html = lxml.html.fromstring(login.text)
#FIND FORMS
hidden_inputs = login_html.xpath(r'//form//input[@type="hidden"]')
form = {x.attrib["name"]: x.attrib["value"] for x in hidden_inputs}
form['username'] = 'myusername'
form['password'] = 'mypassword123'
#LOGIN
response = s.post('https://www.mypage.com/login', data=form)
但是这不适用于我尝试执行实际登录的页面。通过查看Chrome中的检查器,我了解到实际登录(初始POST方法= JsonExecute)如下所示:
常规
Request URL:https://www.mypage.com/services/PlainService.svc/JsonExecute
Request Method:POST
Status Code:200 OK
Remote Address:192.192.192.192:443
响应标头(22)
请求标题(12)
请求有效负载
{method: "login", pageGuid:"ff0e9db6-c0bc-490d-9dd0-593c72689683",...}
Data:{
methodName:"Login"
pageGuid:"ff0e9db6-c0bc-490d-9dd0-593c72689683"
password:"mypassword123"
username:"myusername"
method:"Login"
pageGuid:"ff0e9db6-c0bc-490d-9dd0-593c72689683"
我注意到请求URL指向的东西与我期望的完全不同,我意识到教程对我没有帮助。
如何模仿这个我可以完全遵循Chrome中的检查器的POST方法?