私は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コードの動作を変更している(?)のいずれかを行うと考えられます。この問題の洞察は非常に高く評価されます。
アンカー要素を探していますか? Googleが提供するコンテンツをGoogleが変更した可能性が高いため、探しているものが少なくともこのように見つからなくなる可能性があります。あなたはソースコードを見て、あなたが望む情報がどのタグに含まれているのかを見て、それを抽出する必要があります。 –
@cᴏʟᴅsᴘᴇᴇᴅそうですね。面白いのは、ソースコードをチェックすると、Googleは検索結果にclass = rを使用し、それぞれのリンクの要素にアンカー要素を使用しているようです。私はソースをさらに見て、別の大きな根本的な問題があるかどうかを見ていきます。コメントありがとう! – Rohan
JSを介してロードされている可能性は非常に高いです...あなたはファントムズまたはセレンを見なければならないかもしれません。がんばろう! –