2014-05-25 97 views
-1

我已經經歷了無數Google結果和堆棧溢出問題,試圖找出如何執行以下操作。大多數人建議使用請求會話類來存儲會話信息。如何使用Python的請求正確登錄到網站?

不幸的是,沒有提供的解決方案與我嘗試過的任何網站一起工作。很明顯,我做錯了一些事情,我想弄清楚自己瘋狂之前是什麼。

我當前的代碼:

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

你缺少一些POST參數。 wpLoginToken可能是唯一必需的。

wpLoginAttempt:Log in 
wpLoginToken:... 
wpForceHttps:1 

而且,正確的網址是:

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'] 
+0

你能夠進入更多關於檢索wpLoginToken的細節嗎? – Leinad177

+0

我編輯了我的帖子並添加了如何獲取令牌。 –

+0

非常完美,非常感謝。 – Leinad177