Выпуск соскоб с красивым супом
Я перебираю сайты, прежде чем использовать эту же технику. Но с этим сайтом вроде бы не работает.
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
В выводе должно быть содержимое веб-страницы, но вместо этого я просто получаю это:
GIF89a (следует также некоторые символы, которые я не могу скопировать здесь)
Любые идеи о том, в чем проблема и как мне действовать.
2 ответа
но я хочу знать, почему я получаю подарок, который обращается к URL-адресу, и когда я получаю к нему доступ через свой браузер, я отлично получаю сайт.
потому что эти парни умны и не хотят, чтобы их веб-сайт был доступен вне веб-браузера. Вам нужно подделать известный браузер, добавив User-agent в заголовок. Вот модифицированный пример, который будет работать
>>> 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)
Это означает, что URL, к которому вы обращаетесь, является изображением GIF, а не веб-страницей. На самом деле, я запустил скрипт и сохранил "страницу" в файл, и вы получите 1x1 пиксель белого (или, возможно, прозрачного) GIF.
Причина, по которой вы этого не понимаете в реальном веб-браузере, может заключаться в том, что они не хотят, чтобы вы его очищали.
Из их условий использования: "Вы не можете копировать, воспроизводить, переиздавать, загружать, публиковать, транслировать, передавать или иным образом использовать содержимое Сайта любым способом, кроме как для личного, некоммерческого использования".
Вы могли бы подделать веб-браузер с некоторой работой, но я все же рекомендовал бы вам поговорить с WeatherOnline вместо этого. Они хотят, чтобы вы платили за их данные, но если вы это сделаете, вы наверняка получите хороший API, который вы можете использовать вместо скрининга экрана.