2016-04-16 9 views
0

私は現在、ウェブサイトにログインしようとしています、そして、私のユーザープロフィールから少し詳細(ニュース記事のリスト)をスクラップしています。大学のプロジェクトのために

私はPythonの初心者ですが、他のいくつかのウェブサイトにこれを前にしました。私の最初の2つのアプローチでは、異なるHTTPエラーが発生します。リクエストが送信されているヘッダーに問題があると考えましたが、このサイトのログインプロセスに関する理解は不十分です。

これは、ログインページです:http://seekingalpha.com/account/login

私の最初のアプローチは、次のようになります。

import requests 

with requests.Session() as c: 
    requestUrl ='http://seekingalpha.com/account/orthodox_login' 

    USERNAME = 'XXX' 
    PASSWORD = 'XXX' 

    userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36' 

    login_data = { 
     "slugs[]":None, 
     "rt":None, 
     "user[url_source]":None, 
     "user[location_source]":"orthodox_login", 
     "user[email]":USERNAME, 
     "user[password]":PASSWORD 
     } 

    c.post(requestUrl, data=login_data, headers = {"referer": "http://seekingalpha.com/account/login", 'user-agent': userAgent}) 

    page = c.get("http://seekingalpha.com/account/email_preferences") 
    print(page.content) 

これは "403禁止"

私の第二のアプローチは、次のようになり、その結果:

from requests import Request, Session 

requestUrl ='http://seekingalpha.com/account/orthodox_login' 

USERNAME = 'XXX' 
PASSWORD = 'XXX' 

userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36' 

# c.get(requestUrl) 
login_data = { 
    "slugs[]":None, 
    "rt":None, 
    "user[url_source]":None, 
    "user[location_source]":"orthodox_login", 
    "user[email]":USERNAME, 
    "user[password]":PASSWORD 
    } 
headers = { 
    "accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", 
    "Accept-Language":"de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4", 
    "origin":"http://seekingalpha.com", 
    "referer":"http://seekingalpha.com/account/login", 
    "Cache-Control":"max-age=0", 
    "Upgrade-Insecure-Requests":1, 
    "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36" 
    } 

s = Session() 
req = Request('POST', requestUrl, data=login_data, headers=headers) 

prepped = s.prepare_request(req) 
prepped.body ="slugs%5B%5D=&rt=&user%5Burl_source%5D=&user%5Blocation_source%5D=orthodox_login&user%5Bemail%5D=XXX%40XXX.com&user%5Bpassword%5D=XXX" 

resp = s.send(prepped) 

print(resp.status_code) 

このアプローチでは、ヘッダーを準備しようとしていました私のブラウザがそうするのとまったく同じです。申し訳ありません。これによりHTTPエラー400が発生します。

誰かがアイデアを持っていますか、何が問題になりましたか?おそらくたくさん。

+0

Webサイトは識別が含まれている、彼らのログインフォームに隠しフィールドを追加することにより、ボットから身を守るためにしてみてくださいコード。あなたが識別コードを取得しなければ、彼らはあなたを受け入れることはできません。最初にログインページを取得し、隠されたフィールドを見つけ、それをコピーしてリクエストを投稿する必要があります。これにはバリエーションがあります。したがって、手動でログインするときにブラウザが送信するリクエストの順序を注意深く検討してください。 – Cyb3rFly3r

+0

ありがとう、はい私は他のウェブサイトがこれを行うのを見ました。しかし、私は公式のデータでこのようなトークンや何かを識別することができませんでした。見てください:http://pasteboard.co/eoXubQx.png – MCH

+0

'Mechanize'モジュールを試しましたか? 'requests'モジュールはあなたの唯一の選択肢ですか? – estebanpdl

答えて

2

手動でセッションにログインしてセッションすることに多くのエネルギーを費やすのではなく、すぐにあなたのクッキーを使用してページを削ってください。

通常、ログインすると、あなたの身元を識別するリクエストにCookieが追加されます。例えばこれを確認してください。

My cookie

あなたのコードは次のようになります。

import requests 
response = requests.get("www.example.com", cookies={ 
         "c_user":"my_cookie_part", 
         "xs":"my_other_cookie_part" 
         }) 
print response.content 
関連する問題