2016-04-12 4 views
0

私はwww.researchgate.netのクローラをコーディングしていますが、ログインページに永久に詰まっているようです。私のリクエストに何が問題なのですか?Pythonクローラのセッション?

は、ここに私のコードです:

import requests 
from bs4 import BeautifulSoup 

session = requests.Session() 

params = {'login': 'my_email', 'password': 'my_password'} 
session.post("https://www.researchgate.net/application.Login.html", data = params) 
s = session.get("https://www.researchgate.net/search.Search.html?type=researcher&query=zhang") 
print BeautifulSoup(s.text).title 

誰もが自分のコードに何かを見つけることができますか?毎回ログインページにリダイレクトするのはなぜですか?

+0

あなたが真偽のためのすべてのcreditentialを提供していませんでした。接続するネットワークに送信するものをブラウザでチェックしてください – Whitefret

答えて

1

おそらく提供される必要がある(私はテストできません - 私はそこにログインしていません)ログインフォームに隠しフィールドがあります。

request_tokenは、長いbase64でエンコードされた文字列に設定されています。他にもinvalidPasswordCountloginCookieが必要です。

さらに、ログイン資格情報とともに送信する必要があるセッションCookieがあります。

この作業を行うには、request_tokenを取得するには、最初にGETが必要です。これは何とか抽出する必要があります。 BeautifulSoupで。 requestsセッションを使用している場合、Cookieは次のように表示されます。POSTですので、心配する必要はありません。

import requests 
from bs4 import BeautifulSoup 

session = requests.Session() 

# initial GET to retrieve token and set cookies 
r = session.get('https://www.researchgate.net/application.Login.html') 
soup = r.BeautifulSoup(r.text) 
request_token = soup.find('input', attrs={'name':'request_token'})['value'] 

params = {'login': 'my_email', 'password': 'my_password', 'request_token': request_token, 'invalidPasswordCount': 0, 'loginCookie': 'yes'} 
session.post("https://www.researchgate.net/application.Login.html", data=params) 
s = session.get("https://www.researchgate.net/search.Search.html?type=researcher&query=zhang") 
print BeautifulSoup(s.text).title 
+0

うわー!ありがとうございました!私は首尾よくログインします! – user6191682

0

mhawkeさんありがとうございました。私は元のコードを変更して、最終的には正常にログインしました。

ここに私の新しいコードです:

import requests 
from bs4 import BeautifulSoup 

session = requests.Session() 
loginpage = session.get("https://www.researchgate.net/application.Login.html") 
request_token = BeautifulSoup(loginpage.text).form.find("input",{"name":"request_token"}).attrs["value"] 
print request_token 
params = {"request_token":request_token, 
      "invalidPasswordCount":"0", 
      'login': 'my_email', 
      'password': 'my_password', 
      "setLoginCookie":"yes" 
      } 
session.post("https://www.researchgate.net/application.Login.html", data = params) 
#print s.cookies.get_dict() 
s = session.get("https://www.researchgate.net/search.Search.html?type=researcher&query=zhang") 
print BeautifulSoup(s.text).title 
関連する問題