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.
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
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
Haben Sie das 'Mechanize' Modul ausprobiert? Ist das Modul "Anfragen" Ihre einzige Alternative? – estebanpdl