2013-04-15 18 views
1

我正嘗試使用BeautifulSoup從谷歌圖像中查找隨機圖像。我的代碼看起來像這樣。BeautifulSoup和urllib無法解析谷歌圖像頁面

import urllib, bs4, random 
    from urllib import request 
    urlname = "https://www.google.com/search?hl=en&q=" + str(random.  randrange(999999)) + "&ion=1&bav=on.2,or.r_gc.r_pw.r_cp.r_qf.&bvm=bv. 42553238,d.dmg&biw=1354&bih=622&um=1&ie=UTF-       8&tbm=isch&source=og&sa=N&tab=wi&ei=sNEfUf-fHvLx0wG7uoG4DQ" 

    page = bs4.BeautifulSoup(urllib.request.urlopen(urlname) 

但每當我嘗試從頁面對象獲取的HTML,我得到的,

urllib.error.HTTPError: HTTP Error 403: Forbidden 

我測試是通過將其粘貼到網頁瀏覽器中生成的網址和瀏覽器不返回這個錯誤。任何想法是怎麼回事?

回答

0

我很確定谷歌在告訴你:「請不要這樣做」。請參閱http 403 error的解釋。

發生什麼事是你的Python腳本,或者更具體地說,urllib發送頭文件,告訴谷歌這是某種簡單的請求,它不是來自瀏覽器。

谷歌這樣做是正確的,因爲否則很多人只是刮他們的網站,並顯示谷歌的結果是他們自己的。

到目前爲止,有兩種解決方案

1)使用谷歌custom search API。它支持圖像搜索,每天有100個免費配額 - 用於查詢更多的問題。

2)像mechanize這樣的工具是誤導性的網站,通過告訴他們他們是瀏覽器,而不是實際上通過例如刮取機器人。發送操縱標題。這裏的常見問題是,如果你的垃圾郵件過於貪婪(在很短的時間間隔內請求太多),谷歌將永久阻止你的IP地址...