2017-02-21 3 views
3

Zunächst einmal, ich weiß, es gibt eine Reihe von ähnlichen Fragen, aber leider keiner von ihnen für mich arbeiten. Ich bin ein relativer Anfänger in Python und einfache Erklärungen und Antworten würden sehr geschätzt werden.Wie scrape eine Website, die Anmeldung mit Python erfordert

Ich muss mich auf einer Website mit Python programmgesteuert anmelden. Ich versuche dies mit Anfragen zu tun. Ich habe mir YouTube-Videos zu diesem Thema angesehen und verschiedene Fragen und Antworten angeschaut, aber es funktioniert einfach nicht für mich.

Der folgende Code ist so nah wie ich mein Ziel erreicht habe. Die IDE, die ich verwende, ist Spyder 3.1.2 mit Python 3.6.0. Meine Ausgabe wird als [] angezeigt, wie unter meinem Code gezeigt. Ich habe die gleiche Methode mit anderen Seiten versucht und die Ausgabe ist immer gleich. Ich weiß nicht, was das aber bedeutet. Und wie würde ich wissen, ob der Code funktioniert hat?

import requests 
from lxml import html 

USERNAME = "username" 
PASSWORD = "password" 

LOGIN_URL = "https://bitbucket.org/account/signin/?next=/" 
URL = "https://bitbucket.org/" 

def main(): 
    session_requests = requests.session() 

    # Get login csrf token 
    result = session_requests.get(LOGIN_URL) 
    tree = html.fromstring(result.text) 
    authenticity_token = list(set(tree.xpath("//input[@name='csrfmiddlewaretoken']/@value")))[0] 

    # Create payload 
    payload = { 
     "username": USERNAME, 
     "password": PASSWORD, 
     "csrfmiddlewaretoken": authenticity_token 
    } 

    # Perform login 
    result = session_requests.post(LOGIN_URL, data = payload, headers = dict(referer = LOGIN_URL)) 

    # Scrape url 
    result = session_requests.get(URL, headers = dict(referer = URL)) 
    tree = html.fromstring(result.content) 
    bucket_names = tree.xpath("//div[@class='repo-list--repo']/a/text()") 

    print(bucket_names) 

if __name__ == '__main__': 
    main() 

runfile ('C: /Users/Thomas/untitled6.py', wdir = 'C:/Users/Thomas') []

Vielen Dank im Voraus.

Hühnerbrühe.

Antwort

0

versuchen Sie dies.

result = requests.get(LOGIN_URL, auth=(USERNAME,PASSWORD)) 

überprüfen die Antworten dieser ähnlichen Fragen aus This und This.
Here ist die Dokumentation der Authentifizierung mit Anfragen Modul

Verwandte Themen