2012-02-23 104 views
1

我注意到,使用的urllib下載網頁:下載amazon.co.uk網頁,HTML正是因爲螢火蟲看到它

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

,我回去使用的urlopen內容(URL) .read()與螢火蟲看到的不同。

例子:

如果指向螢火蟲頁面的圖像區域,它會告訴你一個DIV ID =「prodImageCell」翻翻開闢什麼蟒蛇然而當存在,沒有這樣的事,因此美麗的臉沒有找到任何東西。

這是因爲圖像是使用JavaScript生成的?

問:

如果是的話是有下載幾乎同樣的事情螢火蟲精確的方式看到使用的urllib(而不是使用像硒代替)。

我想以編程方式獲取其中一個圖像的源URL,例如這裏是div與prodImageCell有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> 

萬歲!

+0

該ID絕對是在原始HTML中,你應該能夠用'urlopen'看到它。你可能會發布你試圖訪問這個div的代碼嗎? – 2012-02-23 12:36:08

+1

它也可能取決於您發送的HTTP頭(如用戶代理)。你是否嘗試發送與Firefox發送的相同的頭文件? (你可以在請求部分看到它們)。其中一些可能很重要。 – huelbois 2012-02-23 12:41:33

+0

+1 @huelbois沒有想到,會放棄它。馬修我會張貼一個示例,我使用正則表達式來查找「prodImageCell」,並且沒有匹配返回 – user562427 2012-02-23 12:52:47

回答

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頁面。

oops:剛纔看到你成功了我以前的建議。大!