5

在使用相同的技术之前,我一直在抓取网站。但是对于这个网站,它似乎不起作用。

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(它也遵循一些我不能在这里复制的符号)

关于问题是什么以及我应该如何进行的任何想法。

4

2 回答 2

4

但我想知道为什么我会得到一个像这样访问 url 的 gif,当我通过浏览器访问它时,我会完美地访问网站。

因为这些人很聪明,不希望在网络浏览器之外访问他们的网站。您需要做的是通过将 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)
于 2012-12-05T10:15:33.477 回答
0

这意味着您正在访问的 URL 是 GIF 图片,而不是网页。事实上,我运行了脚本并将“页面”保存到一个文件中,你会得到一个 1x1 像素的白色(或可能是透明的)GIF。

实际上,您无法使用实际的网络浏览器获得该信息的原因可能是因为他们不希望您抓取它。

根据他们的使用条款:“您不得以任何方式复制、复制、再版、下载、发布、广播、传输或以其他方式使用本网站的内容,除非用于您个人的非商业用途。”

您可能会通过一些工作伪造网络浏览器,但我仍然建议您改为与 WeatherOnline 交谈。他们希望您为他们的数据付费,但如果您这样做,您肯定会得到一个不错的 API,可以用来代替屏幕抓取。

于 2012-12-05T09:56:24.433 回答