2016-04-16 10 views
0

für ein Universitätsprojekt Ich versuche gerade, mich auf einer Website anzumelden und ein kleines Detail (eine Liste von Nachrichtenartikeln) aus meinem Benutzerprofil zu verschrotten.Login auf die Website über Python Anfragen

Ich bin neu in Python, aber ich tat dies vorher auf einer anderen Website. Meine ersten beiden Ansätze liefern verschiedene HTTP-Fehler. Ich habe Probleme mit der Kopfzeile, die meine Anfrage sendet, berücksichtigt, jedoch scheint mein Verständnis des Anmeldeprozesses dieser Website unzureichend zu sein.

Dies ist die Login-Seite: http://seekingalpha.com/account/login

Mein erster Ansatz wie folgt aussieht:

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) 

Das in "403 Forbidden" führt

Mein zweiter Ansatz wie folgt aussieht:

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) 

Bei diesem Ansatz habe ich versucht, den Header vorzubereiten genau wie mein Browser es tun würde. Entschuldigung für die Redundanz. Dies führt zu HTTP-Fehler 400.

Hat jemand eine Idee, was schief gelaufen ist? Wahrscheinlich viel.

+0

Websites versuchen, sich von Bots zu schützen, indem sie ein verstecktes Feld, um ihre Login-Formulare hinzufügen, welche enthält eine Identifikation Code. Wenn Sie den Identifikationscode nicht bekommen, lassen Sie sie nicht herein. Sie müssen zuerst ihre Anmeldungsseite bekommen, das versteckte Feld finden, das kopieren und die Anfrage aufgeben. Es gibt Variationen dazu. Untersuchen Sie also sorgfältig die Reihenfolge der Anfragen, die der Browser bei der manuellen Anmeldung sendet. – Cyb3rFly3r

+0

Danke, ja, ich habe schon andere Webseiten gesehen. Aber ich konnte ein Token oder etwas in den Formulardaten nicht identifizieren. Schauen Sie mal: http://pasteboard.co/eoXubQx.png – MCH

+0

Haben Sie das 'Mechanize' Modul ausprobiert? Ist das Modul "Anfragen" Ihre einzige Alternative? – estebanpdl

Antwort

2

Anstatt viel Energie für die manuelle Anmeldung und das Spielen mit Session auszugeben, schlage ich vor, dass Sie die Seiten einfach mit Ihrem Cookie abkratzen.

Wenn Sie sich anmelden, wird Ihrer Anfrage normalerweise ein Cookie hinzugefügt, um Ihre Identität zu identifizieren. Bitte beachten Sie dies zum Beispiel:

My cookie

Ihr Code wird so aussehen:

import requests 
response = requests.get("www.example.com", cookies={ 
         "c_user":"my_cookie_part", 
         "xs":"my_other_cookie_part" 
         }) 
print response.content 
Verwandte Themen