LoginSignup
1
1

More than 5 years have passed since last update.

****.py "keyword" でGoogle検索結果のタイトルとURLをcsvに書き込む

Last updated at Posted at 2018-11-06

Goal:pythonを用いて検索結果一覧をみたい

目的

SEO関連の調査を行うにあたり、検索結果の一覧が欲しいと考えました。

https://www.google.com/search?num=2&q=〇〇
のnum=を書き換えて一覧を取得する方法でもいいかな、と思いましたが、
毎回するのは不格好で、かつ、requestsとbs4の勉強もかねて作ってみました。

実行は
***.py "keyword"
で実行してください。
例えば、バターナイフを調べたい場合は
***.py バターナイフ
となります。

複数キーワードを設定したい場合は、keyword1+keywors2+...
と引数を設定すると実行できます。

成果物

# -*- coding: utf-8 -*-
import requests
import sys
from bs4 import BeautifulSoup
import csv
# 項目数を増やす場合は、num=100 など変更します
google = 'https://www.google.com/search?num=10&q='
re = requests.get(google+ ''.join(sys.argv[1:]))
soup = BeautifulSoup(re.text, "lxml")

#soupの具材をみてどこから探すか検討。google検索の場合、下記でうまくいきます。
elems = soup.select(".r a")

for elem in elems:
    #text抽出
    txtelem = elem.getText()
    #url抽出 余分な接頭辞があるので空白に置き換えます。
    repelem = elem.get('href').replace('/url?q=','')
    #確認用に出力しています。不要であれば削除してください。
    print('{} ,{}'.format(txtelem, repelem))
    data = [[txtelem, repelem]]
    with open('googlesearch.csv', 'a', newline='') as f:
        writer = csv.writer(f)
        writer.writerows(data)

同一フォルダ内にgooglesearch.csvが作成、実行ごとに結果が取得されます。

都度csvを上書きをしたい場合は

aw に変えるだけで本来はいいのですが、for で回しているので一行ごとに上書きされてしまいます。
そこで、実行時に前回の内容を削除するコマンドを実行します。

for の前に

with open('googlesearch.csv', 'w', newline='') as f:
    f.write("")

を追記するとうまくできます。

結果を確認

Qiita ,https://qiita.com/&sa=U&ved=0ahUKEwjv-sT0977eAhXNa94KHVMHCLcQFggUMAA&usg=AOvVaw0y_sHe_tLOSNzkcjQHvct_
Qiita (キータ) 公式 (@Qiita) | Twitter ,https://twitter.com/qiita&sa=U&ved=0ahUKEwjv-sT0977eAhXNa94KHVMHCLcQFggaMAE&usg=AOvVaw1qhHoSKmnAa69GduySbEpl
....

検索結果は、下記の通りです。
なお、soupの内容からコードを作成しており、オーガニックな結果のみ(広告・ニュースを除く)取得するようにしています。
広告・ニュースなど、すべての結果を取得する場合、soupの中身をみて、soup.select() の箇所を変更してみるとうまくいくと思います。
qiitasearch.PNG

課題は、日本のデータはこれで取得できますが、海外の場合はどうしたらいいのいか、です。

追記(2018年11月8日)

課題に対して、mareku さんよりコメント欄に以下の記述がありました。

URLにパラメータを追加すれば、海外のGoogle検索結果を見れますよ。
gl 国を指定する。
米国ならgl=us
国コードはISO 3166 - Wikipediaのalpha-2が使用されています。
hl 言語を指定する。
英語なら hl=en
言語コードはISO 639-1 - Wikipediaが使用されています。
ですべてを含むと https://www.google.com/search?&gl=us&hl=en&num=10&q=

ありがとうございました!!!

1
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1