2012-12-05 14 views
5

Ich habe Websites vor der Verwendung dieser gleichen Technik Scraping. Aber mit dieser Website scheint es nicht zu funktionieren.Problem Scraping mit schönen Suppe

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 der Ausgabe sollte der Inhalt der Webseite, aber stattdessen bin ich nur immer diese:

GIF89a (es folgt auch einige Symbole ich hier nicht kopieren)

Irgendwelche Ideen von Was ist das Problem und wie soll ich vorgehen?

Antwort

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.

weil diese Leute sind schlau und wollen nicht, dass ihre Website außerhalb eines Webbrowsers zugegriffen wird. Sie müssen einen bekannten Browser fälschen, indem Sie dem Header User-agent hinzufügen. Hier ist ein modifiziertes Beispiel, die

>>> 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 Beachten Sie, dass sobald sie herausfinden, dass Sie die Seite scrapen, sie nur eine Änderung an ihrem HTML vornehmen werden, die Ihr Scraping unterbricht. Oder blockieren Sie Ihre IP-Adresse. Oder irgendeine andere Veränderung. Sie wollen nicht, dass Sie ihre Website scrappen. Vielleicht solltest du das respektieren. –

+0

@Abhijit: response = opener.open (url) gibt Fehler: – John

+0

Traceback (jüngste Aufforderung zuletzt): File "" Linie 1 in Datei "C: \ Python27 \ lib \ urllib2.py", Linie 406 in offenem response = meth (REQ, response) Datei "C: \ Python27 \ lib \ urllib2.py", Linie 519, in http_response 'http', Anfrage, Antwort, Code, msg, hdrs) Die Datei "C: \ Python27 \ lib \ urllib2.py", Linie 444, in Fehler return self._call_chain (* args) Datei "C: \ Python27 \ lib \ urllib2.py", Linie 527, in http_error_default Raise HTTPError (req.get_full_url(), code, msg, hdrs, fp) HTTPError: HTTP Fehler 4 03: Verboten – John

0

Dies bedeutet, dass die URL, auf die Sie zugreifen, ein GIF-Bild und keine Webseite ist. In der Tat habe ich das Skript ausgeführt und "Seite" in eine Datei gespeichert, und Sie erhalten ein 1x1 Pixel weißes (oder möglicherweise transparentes) GIF.

Der Grund, warum Sie das nicht mit einem tatsächlichen Webbrowser bekommen, kann tatsächlich sein, weil sie nicht wollen, dass Sie es kratzen.

Aus ihren Nutzungsbedingungen: „Sie können nicht kopieren, reproduzieren, herunterladen, veröffentlichen, auszustrahlen, übertragen oder auf andere Weise die Inhalte der Seite in irgendeine Weise verwenden, außer für Ihren persönlichen, nicht-kommerziellen Gebrauch.“

Sie könnten vielleicht einen Webbrowser mit etwas Arbeit fälschen, aber ich würde Ihnen immer noch empfehlen, stattdessen mit WeatherOnline zu sprechen. Sie möchten, dass Sie für ihre Daten zahlen, aber wenn Sie dies tun, werden Sie sicherlich eine nette API erhalten, die Sie anstelle von Screen Scraping verwenden können.

+0

Vielen Dank für Ihre Antwort arbeiten. Ich weiß das, aber ich möchte wissen, warum ich ein GIF erhalte, das die URL so anspricht, und wenn ich über meinen Browser darauf zugreife, bekomme ich die Website perfekt. – Julio

+0

@Julio: Um es schwieriger zu machen, es zu kratzen. Siehe aktualisierte Antwort. –

Verwandte Themen