4

あるキーワードについて、Google から推定結果数を取得したいと考えています。私はPython3.3を使用しており、BeautifulSoupとurllib.requestでこのタスクを達成しようとしています. これはこれまでの私の簡単なコードです

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が機能しないため、Noneが返されます。

私は何を間違っていますか、どうすれば必要なresultstatsを抽出できますか? どうもありがとう!

4

1 に答える 1

3

この問題をまだ解決していない場合、BeautifulSoup が何も見つからないのは、resultStats がスープに表示されないことが原因のようです。あなたの Request(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>

最後に、Selenium Webdriver のようなツールを使用することは、これを解決するためのより良い方法かもしれません.Google はボットが検索結果をスクレイピングすることを許可していないからです.

于 2013-11-29T21:06:48.520 に答える