スポンサーリンク

[python] google検索結果をbeautifulsoupでスクレイピングして、タイトルとURLをセットで取得する

pythonでGoogle検索の結果をbeautifulsoupでスクレイピングして、

タイトルとURLのセットを取得して表示させてみます。

 

import requests
import bs4

# キーワードを使って検索してhtmlを取得する
keyword = 'python'
response = requests.get('https://www.google.co.jp/search?q=' + keyword)

# ステータスコードが200以外なら例外を発生させる
response.raise_for_status()

# 取得したHTMLをパースする
bs = bs4.BeautifulSoup(response.text, "html.parser")

# 検索結果のタイトルとリンクを取得
element = bs.select('.r > a')

title_list = []
url_list = []

for i in range(len(element)):
    # タイトルのテキスト部分のみ取得
    title = element[i].get_text()    
    # リンクのみを取得し、余分な部分を削除する
    url = element[i].get('href').replace('/url?q=','')

    title_list.append(title)
    url_list.append(url)

# 出力
for i in range(len(title_list)):
    print(title_list[i])
    print('['+ url_list[i] +']')
    print('')

実行結果

Welcome to Python.org
https://www.python.org/&sa=U&ved=0ahUKEwjFrcXw1bjfAhUS0lQKHdHNAVUQFggUMAA&usg=AOvVaw1-NvLH6Tv0rGldN36ibIt4
Python - ウィキペディア
Python&sa=U&ved=0ahUKEwjFrcXw1bjfAhUS0lQKHdHNAVUQFggfMAE&usg=AOvVaw3jLHvUDBY5ke7FmiuKTMrN - Wikipedia
プログラミング言語 Python
404 Not Found
Python チュートリアル — Python 3.6.5 ドキュメント
301 Moved Permanently
Python - Qiita
404 Not Found - Qiita - Qiita
Python本まとめ・2019年版 - Webとデータ分析を初心者が仕事にするまで
Entry is not found - Lean Baseball
No Engineering, No Baseball.
今さら聞けない!Pythonとは【初心者向け】 | TechAcademyマガジン
301 Moved Permanently
なぜPythonはこんなにも遅いのか? | POSTD
POSTD | ニジボックスが運営するエンジニアに向けたキュレーションメディア
POSTD は、ニジボックスが運営する、エンジニアに向けたキュレーションメディアです。ニジボックスはWebサービスの企画、制作、開発、運用を一貫して担うリクルートの100%子会社です。 リクルートグループのオンラインサービスをはじめ、様々な業種・業界・業態のサービス開発を行っております。
専門知識いらず!Pythonとは何かを言語の特徴から網羅的に徹底解説 ...
Page not found | 侍エンジニアブログ
Python入門 〜Pythonのインストール方法やPythonを使った ...
404 File Not Found

解説

下記は、class=’r’を使っているタグの内側で使われているaタグで囲まれている内容を取ります。

element = bs.select('.r > a')

element[0]の中身の例

<a href="/url?q=https://www.python.org/&amp;sa=U&amp;ved=0ahUKEwj9nfff17jfAhUICjQIHXerBOkQFggUMAA&amp;usg=AOvVaw2S32M1LB2og9X0Ed6Q3cu1">Welcome to <b>Python</b>.org</a>

 

そして下記でタグを除去してタイトルのテキスト部分のみを取得できます。

title = element[i].get_text()

urlの取得は、get()でhrefの属性のデータを取るように指定して、余計な文字を除去しています。

url = element[i].get('href').replace('/url?q=','')

これでタイトルとURLが取得できました

 

参考

PythonのrequestsとBeautifulSoupでGoogle検索結果から、タイトルとURLと説明文だけを抜き取る

関連記事