我想访问https://bato.to/中要求我先登录的一些内容。他们的登录页面是:https://bato.to/forums/index.php?app=core&module=global§ion=login
我已经打开了chrome的Web开发人员工具来检查我点击登录时发送的POST。 POST中的“表单数据”是:
auth_key:880ea6a14ea49e853634fbdc5015a024
referer:https://bato.to/forums/
ips_username:startwinkling
ips_password:password1
rememberMe:1
所以我尝试用代码实现这个:
到目前为止代码
from requests import session
import re
AUTH_KEY = re.compile(r"<input type='hidden' name='auth_key' value='(.*?)' \/>")
payload = {
'ips_username': 'startwinkling',
'ips_password': 'password1',
'rememberMe' : '1',
'referer' : 'https://bato.to/forums/'
}
with session() as c:
login_url = 'https://bato.to/forums/index.php?app=core&module=global§ion=login'
page = c.get(login_url)
auth_key = AUTH_KEY.search(page.text).group(1)
payload['auth_key'] = auth_key
print("auth_key: %s" % auth_key)
page = c.post(login_url, data=payload)
page = c.get('https://bato.to/reader#4b57865eb3a9a9a6')
print(page.text)
我相信自从代码输出后,我正在抓取并正确传递auth_key:
auth_key: 880ea6a14ea49e853634fbdc5015a024
但是打印出的HTML表明我无法成功登录。我在这里缺少什么?
答案 0 :(得分:0)
您用于POST的网址不正确。
正确的应该是https://bato.to/forums/index.php?app=core&module=global§ion=login&do=process
,它与登录着陆页不同,注意额外的do=process
部分。
<强>代码:强>
from requests import session
import re
AUTH_KEY = re.compile(r"<input type='hidden' name='auth_key' value='(.*?)' \/>")
payload = {
'ips_username': 'startwinkling',
'ips_password': 'password1',
'rememberMe' : '1',
'referer' : 'https://bato.to/forums/'
}
with session() as c:
login_url = 'https://bato.to/forums/index.php?app=core&module=global§ion=login'
page = c.get(login_url)
auth_key = AUTH_KEY.search(page.text).group(1)
payload['auth_key'] = auth_key
print("auth_key: %s" % auth_key)
page = c.post(login_url + '&do=process', data=payload)
page = c.get('https://bato.to/reader#4b57865eb3a9a9a6')
print(page.text)
PS 我建议您添加一些标题(不使用默认标题),您可能不希望在其分析中显示为User-Agent: python-requests/1.2.3 CPython/2.7.3 Windows/7
,如果他们在某些页面上为“非浏览器”访问设置了一些限制。