如何使用Python的请求正确登录网站?

时间:2014-05-25 15:21:50

标签: python login

我经历过无数的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."

1 个答案:

答案 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']
相关问题