PythonのBeautifulSoupを使ってGoogleの検索結果をスクレイピングして取得したデータをプロンプトに表示する

スポンサーリンク

Googleの検索結果をひたすら表示するスクレイピングコードの概要

googleで検索したいキーワード(クエリ)を決めておいて、その検索結果のページをスクレイピングしてタイトルとリンクを表示します。1ページ目のスクレイピングが終わったら2ページ目、3ページ目…というようにスクレイピングしていくことで情報をたくさん取得できるようになります。

利用するPythonのモジュールは以下です

  • requestsモジュール
  • bs4モジュール
スポンサーリンク

Googleの検索結果をプロンプトに一覧表示するPythonコード

import requests
import bs4

def searchreturn(search_word):
    google_page = []
    for i in range(0, 50, 10):
        page = '&start={}'.format(str(i))
        google_page.append(page)

    count = 1
    page_num = 1
    for page in google_page:
        res = requests.get('https://www.google.co.jp/search?q=' + search_word + page)
        res.raise_for_status()
        soup = bs4.BeautifulSoup(res.text, 'html.parser')
        elems = soup.select('.r')
        elems_a = soup.select('.r a')
        print(str(count) + 'ページ目を表示します')
        print('\n')
        count += 1
        for i in range(len(elems)):
            print(str(page_num) + '---' + elems[i].text)
            print('https://www.google.co.jp' + elems_a[i].get('href'))
            print('\n')
            page_num += 1

searchreturn('dos攻撃')

結果的にはこんな感じになります。

別に普通に検索すればいいんじゃね?と言われればそれまでなんですが情報を大量に閲覧したい場合に役立つかもしれません。

コードの解説

for i in range(0, 50, 10):

ここで10ずつ増加させている理由は検索のURLでstart=10とすることで検索結果の2ページ目を表示できるからです。start=20だと3ページ目になります。ですので最終的なURLの形は以下のようになります↓

elems = soup.select(‘.r’)とelems_a = soup.select(‘.r a’)

「.r」はGoogle検索結果のタイトル、「.r a」は検索結果のリンクを取得しています。あとのfor文で取得した情報を表示しています。

まとめ

今回のPythonプログラムではGoogleの検索結果をプロンプトに一覧で表示するものでした。

このプログラムの注意点なのですが、現(2023/08リライト)時点でグーグルはユーザーごとに違う検索結果を表示しますので、BeautifulSoupを使ってGoogleの検索結果を取得しても期待通りのデータが取得できません。また要素のクラスが将来的に変わる可能性もあることに注意してください。

期待通りにデータが取得できない場合はフロント(ブックマークレットとかJavaScript)でデータを表示するなどしたほうがよいと思います。

コメント

タイトルとURLをコピーしました