2012-12-05 4 views
5

Ho raschiato siti Web prima di utilizzare la stessa tecnica. Ma con questo sito sembra non funzionare.Emissione di scraping con Beautiful Soup

import urllib2 
from BeautifulSoup import BeautifulSoup 
url = "http://www.weatheronline.co.uk/weather/maps/current?LANG=en&DATE=1354104000&CONT=euro&LAND=UK&KEY=UK&SORT=1&INT=06&TYP=sonne&ART=tabelle&RUBRIK=akt&R=310&CEL=C" 
page=urllib2.urlopen(url).read() 
soup = BeautifulSoup(page) 
print soup 

In uscita dovrebbe essere il contenuto della pagina web, ma invece io sono solo ottenere questo:

GIF89a (segue anche alcuni simboli non riesco a copiare qui)

Tutte le idee di qual è il problema e come dovrei procedere.

risposta

4

but I want to know why I am getting a gif accesing the url like that and when I access it via my browser I get the website perfectly.

perché questi ragazzi sono intelligenti e non vogliono che il loro sito Web sia accessibile al di fuori di un browser web. Quello che devi fare è simulare un browser conosciuto aggiungendo User-agent all'intestazione. Ecco un esempio modificato che funzionerà

>>> import urllib2 
>>> opener = urllib2.build_opener() 
>>> opener.addheaders = [('User-agent', 'Mozilla/5.0')] 
>>> url = "http://www.weatheronline.co.uk/weather/maps/current?LANG=en&DATE=1354104000&CONT=euro&LAND=UK&KEY=UK&SORT=1&INT=06&TYP=sonne&ART=tabelle&RUBRIK=akt&R=310&CEL=C" 
>>> response = opener.open(url) 
>>> page = response.read() 
>>> from BeautifulSoup import BeautifulSoup 
>>> soup = BeautifulSoup(page) 
+0

@Abhijit Nota che non appena capiscono che stai raschiando il sito, potrebbero semplicemente modificare il loro codice HTML che interrompe lo scraping. Oppure blocca il tuo indirizzo IP. O qualsiasi altro cambiamento. Non vogliono che tu scriva il loro sito. Forse dovresti rispettarlo. –

+0

@Abhijit: Risposta = opener.open (url) restituisce errori: – John

+0

Traceback (chiamata più recente scorso): file "", linea 1, in file "C: \ Python27 \ lib \ urllib2.py", la linea 406, in aperta risposta = meth (req, risposta) file "C: \ Python27 \ lib \ urllib2.py", la linea 519, in http_response 'http', richiesta, risposta, il codice, MSG, HDRS) file "C: \ Python27 \ lib \ urllib2.py", la linea 444, per errore di ritorno self._call_chain (* args) file "C: \ Python27 \ lib \ urllib2.py", la linea 527, in http_error_default raise HTTPError (req.get_full_url(), code, msg, hdrs, fp) HTTPError: errore HTTP 4 03: Proibito – John

0

Significa che l'URL a cui si accede è un'immagine GIF, non una pagina Web. In effetti, ho eseguito lo script e salvato la "pagina" in un file, e ottieni una GIF bianca da 1 x 1 pixel (o possibilmente trasparente).

Il motivo per cui non lo si ottiene con un browser Web effettivo potrebbe essere perché non vogliono che lo si scriva.

Dalle loro condizioni di utilizzo: "Non è consentito copiare, riprodurre, ripubblicare, scaricare, inviare, trasmettere o altrimenti utilizzare il contenuto del sito in qualsiasi modo tranne che per il proprio uso personale, non commerciale."

si potrebbe forse finto un web-browser con po 'di lavoro, ma mi piacerebbe ancora vi consiglio di parlare con woitalia invece. Vogliono che paghiate per i loro dati, ma se lo farete, otterrete sicuramente una buona API che potete utilizzare al posto dello screen scraping.

+0

Grazie per la risposta. Lo so, ma voglio sapere perché sto ottenendo una gif che acceda l'url in quel modo e quando accedo tramite il mio browser ottengo il sito perfettamente. – Julio

+0

@ Julio: per renderlo più difficile da raschiare. Vedi risposta aggiornata. –