2016-08-01 5 views
3

Ich bin neu in Python und Web Scapping und ich versuche, ein sehr einfaches Skript zu schreiben, das Daten von einer Webseite erhält, die nur nach dem Einloggen zugegriffen werden kann. Ich habe angeschaut Eine Reihe verschiedener Beispiele, aber keine beheben das Problem. Das ist, was ich habe, so weit:.Scrape Daten von einer Seite, die ein Login benötigt

from bs4 import BeautifulSoup 
import urllib, urllib2, cookielib 

username = 'name' 
password = 'pass' 

cj = cookielib.CookieJar() 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 
login_data = urllib.urlencode({'username' : username, 'password' : password}) 
opener.open('WebpageWithLoginForm') 
resp = opener.open('WebpageIWantToAccess') 
soup = BeautifulSoup(resp, 'html.parser') 
print soup.prettify() 

Ab jetzt wenn ich die Seite zu drucken druckt nur den Inhalt der Seite, als ob ich nicht angemeldet war Ich denke, das Problem etwas mit dem zu tun, So stelle ich die Cookies ein, aber ich bin mir nicht sicher, weil ich nicht ganz verstehe, was mit dem Cookie-Prozessor und seinen Bibliotheken passiert. Vielen Dank!

Aktuelle Code:

import requests 
import sys 

EMAIL = 'usr' 
PASSWORD = 'pass' 

URL = 'https://connect.lehigh.edu/app/login' 

def main(): 
    # Start a session so we can have persistant cookies 
    session = requests.session(config={'verbose': sys.stderr}) 
    # This is the form data that the page sends when logging in 
    login_data = { 
     'username': EMAIL, 
     'password': PASSWORD, 
     'LOGIN': 'login', 
    } 

    # Authenticate 
    r = session.post(URL, data=login_data) 

    # Try accessing a page that requires you to be logged in 
    r = session.get('https://lewisweb.cc.lehigh.edu/PROD/bwskfshd.P_CrseSchdDetl') 

if __name__ == '__main__': 
    main() 
+0

Mögliche Duplikat [Anmeldung zur Website mit Python] (http://stackoverflow.com/questions/8316818/login-to-website-using-python) – Harrison

Antwort

0

können Sie das requests Modul verwenden.

Werfen Sie einen Blick auf diese Antwort, die ich unten verlinkt habe.

https://stackoverflow.com/a/8316989/6464893

+0

Kann ich rufen Sie die Methode main() ohne die Zeilen 'if __name__ = __main__'? –

+0

Sie haben bisher keine Funktionen in Ihrem Skript definiert, geschweige denn eine Hauptfunktion. Es empfiehlt sich, ähnliche Code-Blöcke in Funktionen zu gruppieren. Warum willst du nicht 'if __name__ == '__main __' verwenden:'? – Harrison

+0

Was bedeutet die Linie genau? 'if __name__ == '__main__': main()' –

Verwandte Themen