2012-12-05 103 views
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

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.

因为这些人很聪明,不想让他们的网站在网页浏览器之外访问。你需要做的是通过向头添加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) 
+0

@Ahhijit请注意,一旦他们发现你正在挖掘该网站,他们可能只是改变他们的HTML来打破你的欺骗。或者阻止你的IP地址。或者其他任何改变。他们不希望你刮他们的网站。也许你应该尊重这一点。 –

+0

@Abhijit:响应= opener.open(URL)返回的错误: – John

+0

回溯(最近通话最后一个): 文件 “”,1号线,在 文件 “C:\ Python27 \ LIB \ urllib2.py”第406行,打开 response = meth(req,response) 文件“C:\ Python27 \ lib \ urllib2.py”,第519行,http_response 'http',请求,响应,代码,msg,hdrs) 文件“C:\ Python27 \ lib \ urllib2.py”,第444行,出错 返回self._call_chain(* args) http_error_default中的文件“C:\ Python27 \ lib \ urllib2.py”,第527行 引发HTTPError(req.get_full_url(),code,msg,hdrs,fp) HTTPError:HTTP Error 4 03:禁止 – John

0

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

你没有通过真正的网页浏览器得到这个结果的原因实际上可能是因为他们不希望你刮掉它。

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

你也许会伪造一个带有一些工作的网页浏览器,但我仍然建议你与WeatherOnline交谈。他们希望你支付他们的数据,但如果你这样做,你一定会得到一个很好的API,你可以使用,而不是屏幕抓取。

+0

感谢您的回答。我知道,但我想知道为什么我得到一个像这样的URL访问,当我通过我的浏览器访问它,我完美地获得网站。 – Julio

+0

@Julio:让它更难刮。查看更新的答案。 –