我经历过无数的Google搜索结果和Stack Overflow问题,试图找出如何执行以下操作。大多数人建议使用请求的会话类来存储会话信息。
不幸的是,所提供的解决方案都没有与我尝试的任何网站一起使用。显然我做错了什么,我想弄清楚在我疯狂之前是什么。
我目前的代码:
from requests import session
from bs4 import BeautifulSoup as bs
USER = 'leinad177'
PASSWORD = '' # removed for obvious reasons
URL = 'https://en.wikipedia.org/w/index.php?title=Special:UserLogin'
with session() as s:
login_data = {'wpName': USER,
'wpPassword': PASSWORD}
r = s.post(URL, data=login_data)
r = s.get('https://en.wikipedia.org/wiki/Special:Preferences')
print bs(r.text).find('div', {'id':'mw-content-text'}).p.text.strip()
# "Please log in to change your preferences."
答案 0 :(得分:1)
您缺少一些POST参数。 wpLoginToken可能是唯一必须的。
wpLoginAttempt:Log in
wpLoginToken:...
wpForceHttps:1
此外,正确的URL是:
https://en.wikipedia.org/w/index.php?title=Special:UserLogin&action=submitlogin&type=login
wpLoginToken不是静态的,你必须在登录前用beautifulsoup解析它。
如何获取令牌:
from bs4 import BeautifulSoup as bs
import requests
s = requests.session()
URL = 'https://en.wikipedia.org/w/index.php?title=Special:UserLogin'
req = s.get(URL).text
html = bs(req)
wp_login_token = html.find("input", {"name": "wpLoginToken"}).attrs['value']