2014-04-16 10 views
22

Jeśli chcę zeskanować stronę internetową, która wymaga najpierw logowania z hasłem, w jaki sposób mogę rozpocząć skrobanie za pomocą Pythona przy użyciu biblioteki beautifulsoup4? Poniżej przedstawiam, co robię dla stron internetowych, które nie wymagają logowania.Jak zeskrobać stronę, która wymaga logowania przy użyciu Pythona i BeautifulSoup?

from bs4 import BeautifulSoup  
import urllib2 
url = urllib2.urlopen("http://www.python.org")  
content = url.read()  
soup = BeautifulSoup(content) 

Jak zmienić kod, aby uwzględnić logowanie? Załóżmy, że strona, którą chcę skrobać, jest forum wymagającym logowania. Przykładem jest http://forum.arduino.cc/index.php

Odpowiedz

34

Można użyć mechanize:

import mechanize 
from bs4 import BeautifulSoup 
import urllib2 
import cookielib 

cj = cookielib.CookieJar() 
br = mechanize.Browser() 
br.set_cookiejar(cj) 
br.open("https://id.arduino.cc/auth/login/") 

br.select_form(nr=0) 
br.form['username'] = 'username' 
br.form['password'] = 'password.' 
br.submit() 

print br.response().read() 

Or urllib - Login to website using urllib2

+0

'br.form [' username '] =' nazwa użytkownika ' to pierwsza "nazwa użytkownika" nazwa formularza, a druga faktyczna nazwa użytkownika? –

+3

@DanS. Jest to dość późno .. ale dla każdego, kto to widział, tak ... pierwsza nazwa użytkownika jest nazwą pola formularza .. a druga nazwa użytkownika byłaby rzeczywistą nazwą użytkownika, którą wpisałeś w tym polu formularza. –

1

Można użyć selen, aby zalogować się i pobrać źródło strony, które można następnie przekazać do Pięknej zupy wyodrębnij żądane dane.

+4

Zastanów się, podając więcej szczegółów w swojej odpowiedzi. – Script47

Powiązane problemy