2017-07-07 13 views
0

私はAl SweigartのオンラインAutomate The Boring Stuffを使ってPythonチュートリアルで作業しています。ここでは、プログラムが行うことになっているものの説明と私のコードは次のとおりです。Pythonを使ったWebscraping(美味しいスープ&リクエスト)

#! python3 
# lucky.py - A small program that allows you to get search keywords from 
# command line arguments, retrieve the search results page, and open 
# a new browser tab for each result 

# Steps: 
# 1. Read the command line arguments from sys.argv 
# 2. Fetch the search result page with the requests module 
# 3. Find the links to each search result 
# 4. Call the webbrowser.open() function to open the web browser 

import sys, requests, bs4, webbrowser 

# 1. Read the command line arguments from sys.argv 

print('Googling...') 

if len(sys.argv) > 1: 
    search = ' '.join(sys.argv[1:]) 

url = "https://www.google.com/#q=" 

for i in range(len(search.split())): 
    url += search.split()[i] + "+" 

# 2. Fetch the search result page with the requests module 

page = requests.get(url) 

# 3. Find the links to each search result 

soup = bs4.BeautifulSoup(page.text, 'lxml') 
linkElems = soup.select('.r a') 

# 4. Call the webbrowser.open() function to open the web browser 

numOpen = min(5, len(linkElems)) 
for i in range(numOpen): 
    webbrowser.open("http://google.com" + linkElems[i].get('href')) 

ので、ここでの問題は、私がlinkElemsの長さをチェックするとき、それは意味し、0だということであるsoup.select(」R aは。 ')コマンドは、要素<の中で定義された内容を集計することができませんでした。> class = r(デベロッパーツールの使用時に見られるGoogleの検索結果にのみ使用されるクラス)その結果、検索結果のWebページがブラウザに表示されません。

私の問題は、HTMLパーサーが正しく動作しないか、またはGoogleがHTMLコードの動作を変更している(?)のいずれかを行うと考えられます。この問題の洞察は非常に高く評価されます。

+1

アンカー要素を探していますか? Googleが提供するコンテンツをGoogleが変更した可能性が高いため、探しているものが少なくともこのように見つからなくなる可能性があります。あなたはソースコードを見て、あなたが望む情報がどのタグに含まれているのかを見て、それを抽出する必要があります。 –

+0

@cᴏʟᴅsᴘᴇᴇᴅそうですね。面白いのは、ソースコードをチェックすると、Googleは検索結果にclass = rを使用し、それぞれのリンクの要素にアンカー要素を使用しているようです。私はソースをさらに見て、別の大きな根本的な問題があるかどうかを見ていきます。コメントありがとう! – Rohan

+1

JSを介してロードされている可能性は非常に高いです...あなたはファントムズまたはセレンを見なければならないかもしれません。がんばろう! –

答えて

0

linkElems = soup.find_all('a',href=True)これは、すべての関連する<a>タグを返します。リストを処理して、何を保持し、何を保持しないかを決定することができます。

+0

これはたくさんのリンクを返すものですが、残念ながらそれらはImages、Videos、SettingsなどのGoogleの他の部分へのすべてのリンクです...結果のリストが表示され、href値のいずれも検索結果ではありませんURL。とにかく答えてくれてありがとう! – Rohan

0

Googleは、あなたがボットであり、CookieとJavascriptで実際のウェブブラウザではないことを検出しているようです。彼らが新しい結果でやろうとしているように見えるのは、依然としてウェブスクレイパーに彼らが提供するリンクに従い、https://www.google.comの接頭辞を付けて、そのURLに行くときにあなたの動きを追跡できるようにすることです。

また、提供されたリンクでパターンを見つけることもできます。あなたは「Linuxのために検索した場合たとえば、それは次の値を返します。「?/ URL Q =」

/url?q=https://en.wikipedia.org/wiki/Linux&sa=U&ved=9775308e-206b-11e8-b45f-fb72cae612a8&usg=9775308e-206b-11e8-b45f-fb72cae612a8 
/url?q=https://www.linux.org/&sa=U&ved=9775308e-206b-11e8-b45f-fb72cae612a8&usg=9775308e-206b-11e8-b45f-fb72cae612a8 
/url?q=https://www.linux.com/what-is-linux&sa=U&ved=9775308e-206b-11e8-b45f-fb72cae612a8&usg=d50ea51a-206b-11e8-9432-2bee635f8337 
/url?q=https://www.ubuntu.com/&sa=U&ved=9775308e-206b-11e8-b45f-fb72cae612a8&usg=dab9f6a4-206b-11e8-a999-3fc9d4576425 
/search?q=linux&ie=UTF-8&prmd=ivns&source=univ&tbm=nws&tbo=u&sa=X&ved=9775308e-206b-11e8-b45f-fb72cae612a8 

あなたが間の部分をつかむために正規表現を使用することができますと「& SA = U & VED =」それはおそらくあなたが望むURLなのです。もちろん、それはGoogle Webサイトにとって特別なものなので、返された5番目の結果では機能しません。繰り返しますが、返された各URLの先頭にhttps://www.google.comをタックするのが最も安全です。

ほとんどの検索エンジン(duckduckgo.comを含む)も検索結果とクリックをトラッキングしようとしています。あなたがそれを避けようとすると、彼らはあなたをブロックする検知コードを持っています。あなたは、あなたのIPからの多数の検索を検出したことをGoogleに伝え、続行するためにCAPTCHAテストを受ける必要があります。

関連する問題