只使用python下载amazon.co.uk网页,html就像firebug看到的一样

时间:2012-02-23 12:31:52

标签: python web-crawler urllib

我注意到使用urllib下载网页:

http://www.amazon.co.uk/Darkness-II-Limited-PC-DVD/dp/B005ULLEX6

我使用urlopen(url).read()获取的内容与firebug看到的内容不同。

示例:

如果你将firebug指向页面的图像区域,它会告诉你 div id =“prodImageCell”存在,但是当查看python打开的时候,没有这样的东西,因此beautifulsoup不会找不到任何东西。

这是因为图像是使用javascript生成的吗?

问题:

如果是这样,有一种方法可以下载firebug使用urllib看到的完全相同的东西(而不是使用像Selenium这样的东西)。

我正在尝试以编程方式获取其中一个图像的源URL,例如这里是带有prodImageCell的div有src = http://ecx.images-amazon.com/images/I/51uPDvJGS3L。 AA300 .jpg这确实是图片的网址。

答案:

无法正确回答,因为我没有声誉:(

感谢@huelbois找到解决方案,指出我正确的方向,需要使用用户代理标题。

之前

>>> import urllib2
>>> import re
>>> site = urllib2.urlopen('http://www.amazon.co.uk/\
Darkness-II-Limited-PC-DVD/dp/B005ULLEX6').read()
>>> re.search( 'prodImageCell', site )
>>>

>>> user_agent = "Mozilla/5.0 (Windows NT 5.1; rv:7.0.1) Gecko/20100101\
Firefox/7.0.1"
>>> headers = {'User-Agent':user_agent}
>>> req = urllib2.Request(url=url,headers=headers)
>>> site = urllib2.urlopen(req).read()
>>> re.search( 'prodImageCell', site )
<_sre.SRE_Match object at 0x01487DB0>

乌拉!

1 个答案:

答案 0 :(得分:2)

现在使用wget进行测试(将像urrlib一样工作)。 您必须包含User-Agent标头才能获取所请求的部分:

wget -O- --header ='User-Agent:Mozilla / 5.0(Windows NT 6.1; rv:9.0.1)Gecko / 20100101 Firefox / 9.0.1'http://www.amazon.co.uk/Darkness-II-Limited-PC-DVD/dp/B005ULLEX6

返回包含所请求部分的html页面。

哎呀:刚看到你现在的建议就成功了。太好了!