2013-07-05 73 views
4

我希望從google獲得關鍵字的估算結果數字。我使用Python3.3並嘗試使用BeautifulSoup和urllib.request完成此任務。這是我的簡單代碼到目前爲止用python捕獲google resultstats

def numResults(): 
try: 
    page_google = '''http://www.google.de/#output=search&sclient=psy-ab&q=pokerbonus&oq=pokerbonus&gs_l=hp.3..0i10l2j0i10i30l2.16503.18949.0.20819.10.9.0.1.1.0.413.2110.2-6j1j1.8.0....0...1c.1.19.psy-ab.FEBvxrgi0KU&pbx=1&bav=on.2,or.r_qf.&bvm=bv.48705608,d.Yms&''' 
    req_google = Request(page_google) 
    req_google.add_header('User Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20120427 Firefox/15.0a1') 
    html_google = urlopen(req_google).read() 
    soup = BeautifulSoup(html_google) 
    scounttext = soup.find('div', id='resultStats') 
except URLError as e: 
    print(e) 
return scounttext 

我的問題是,我的湯變量是不知何故編碼,我不能得到任何信息。所以我找回沒有,因爲soup.find不起作用。

我在做什麼錯,我該如何提取想要的結果? 非常感謝!

回答

3

如果你還沒有解決這個問題,它看起來像BeautifulSoup沒有找到任何東西的原因是resultStats永遠不會出現在湯 - 你的請求(page_google)只返回JavaScript,而不是任何搜索結果JavaScript是動態加載的。您可以通過將代碼添加到

print(soup) 

命令來驗證此問題,您將看到resultStats div未出現。

下面的代碼:

import sys                                         
from urllib2 import Request, urlopen                                   
import urllib                                        
from bs4 import BeautifulSoup                                    
query = 'pokerbonus'                                       
url = "http://www.google.de/search?q=%s" % urllib.quote_plus(query)                           
req_google = Request(url)                                     
req_google.add_header('User-Agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3')           
html_google = urlopen(req_google).read()                                  
soup = BeautifulSoup(html_google)                                   
scounttext = soup.find('div', id='resultStats')                                
print(scounttext) 

將打印

<div class="sd" id="resultStats">Ungefähr 1.060.000 Ergebnisse</div> 

最後,使用諸如硒的webdriver的工具可能是一個更好的方式去解決這一點,因爲谷歌不允許漫遊器刮搜索結果。