no-image

「googleで検索結果5件を表示」これがwebスクレイピング?

googleの検索結果を自動で表示するPythonコード


import requests, sys, webbrowser, bs4

print('googling...') #ダウンロード中
res = requests.get('https://www.google.co.jp/search?q=' + ' '.join(sys.argv[1:]))
res.raise_for_status()

soup = bs4.BeautifulSoup(res.text)
link_elems = soup.select('.r a')

num_open = min(5, len(link_elems))
for i in range(num_open):
webbrowser.open('https://www.google.co.jp' + link_elems[i].get('href'))

「退屈なことはpythonにやらせよう」もついにwebスクレイピングの章まできました。あまり驚きはないスクリプトですが、嬉しい人にとっては嬉しいかもしれないです。このスクリプトはコマンドライン引数というのを使いますので、これを知らないといけません。本見たほうがはやいので気になったら買ってください。

プログラムコードの解説

requests.get()

webページをダウンロードします。join(sys.argv[1])はプログラマーが任意で入力する引数です。これがコマンドライン引数ですが、これは本を読んだほうがたぶんはやいです。インターネットにも情報はあるかもしれませんが、理解するまでにおそらく時間がかかります。

raise_for_status()

ダウンロードが成功すれば、何もしないが、失敗すればエラーをおこす。

bs4.BeautifulSoup(res.text)

ダウンロードしたwebページのhtmlをBeautifulSoup()に渡す。→ビューティフルオブジェクトができる
→select()関数が使えるようになる。

.select(‘.r a’)

class ’r’ のaタグの部分をselect()としてリストにする。(html,cssの知識が若干いる)

min()

最小値を返す。検索結果が5件未満であれば、5よりも小さくなるということ。

.get(‘href’)

get()関数にhtmlの属性名を渡すと、属性値を返す。webbrowser.open()によって、検索結果のリンクが開かれていくことになります。最後のhrefの部分をherfと間違えて記述してしまい、気づくのに時間がかかってしまいました。

まとめ

webスクレイピングとは呼べないような簡単なスクリプトではありますが、覚えることが多いと感じるかもしれないです。しかしこれはもはや、覚えるというよりも慣れに近い部分があると思います。分からなかったらその都度本で確認する。htmlやcssも関連してきますし、ちょっとハードルが高い気がしなくもないです。抑えるべきポイントは数点かもしれませんが、それでも少し難しく感じます。