使用Beautiful Soup进行刮痧

时间:2012-12-05 09:54:50

标签: python beautifulsoup urllib2

在使用同样的技术之前,我一直在抓网站。但是这个网站似乎没有用。

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 个答案:

答案 0 :(得分:4)

  

但我想知道为什么我会像这样获取一个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)

答案 1 :(得分:0)

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

您使用实际网络浏览器获得该功能的原因实际上可能是因为他们不希望您将其删除。

从他们的使用条款: "除个人非商业用途外,您不得以任何方式复制,复制,重新发布,下载,发布,广播,传播或以其他方式使用本网站的内容。 "

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