[Python] Google検索キーワードのサジェスト一覧を取得する

Google検索でキーワード入力時に出てくるサジェストの一覧をPythonで取得するスクリプトについて書いていきます。

ライブラリ


今回はrequestsだけです。

pip install requests

Pythonコード・解説


APIからxml取得してそれをパースするだけといった感じ。query変数は各自で変更してください。

注意するところはUserAgentのところ。ブラウザからのアクセスを想定しているためUserAgentがないとエラーになるようです。

ここに実際に使われる値をheaderに設定してあげます。値はここを参考にしました。

https://qiita.com/kapiecii/items/093ffd6f0b09ad775250

ちなみにこのAPIの公式ドキュメント探してみたが見当たらなかった。非公式なのだろうか…。

import requests
import xml.etree.ElementTree as ET


# UserAgentを偽装しないと正常なデータを取得できない
headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100"
}
url = "http://www.google.com/complete/search"
# キーワードは各自変更してください
query = "python"
response = requests.get(
    url,
    headers=headers,
    params={"q": query, "ie": "utf_8", "oe": "utf_8", "output": "toolbar"},
)

# XMLデータをパースする
res_xml: ET.Element = ET.fromstring(response.text)

keyword_nodes = res_xml.findall("CompleteSuggestion/suggestion")

# サジェストのキーワードリスト
suggest_keywords = list(map(lambda x: x.attrib["data"], keyword_nodes))

print(suggest_keywords)

ちなみにこんな感じのxmlが取得できます。

findall(“CompleteSuggestion/suggestion)して.attrib[“data”]でサジェストキーワードを抽出できます。

<toplevel>
  <CompleteSuggestion>
    <suggestion data="python" />
  </CompleteSuggestion>
  <CompleteSuggestion>
    <suggestion data="python 入門" />
  </CompleteSuggestion>
  <CompleteSuggestion>
    <suggestion data="python インストール" />
  </CompleteSuggestion>
  <CompleteSuggestion>
    <suggestion data="python for" />
  </CompleteSuggestion>
  <CompleteSuggestion>
    <suggestion data="python range" />
  </CompleteSuggestion>
  <CompleteSuggestion>
    <suggestion data="python if" />
  </CompleteSuggestion>
  <CompleteSuggestion>
    <suggestion data="python csv 読み込み" />
  </CompleteSuggestion>
  <CompleteSuggestion>
    <suggestion data="python 正規表現" />
  </CompleteSuggestion>
  <CompleteSuggestion>
    <suggestion data="python 辞書" />
  </CompleteSuggestion>
  <CompleteSuggestion>
    <suggestion data="python 配列" />
  </CompleteSuggestion>
</toplevel>

コメントを残す

メールアドレスが公開されることはありません。