
Pythonで検索結果のタイトルやアドレス、H2.3タグをGoogleスプレッドシートに書き出す方法
書きたいことと求められていることは違う
自分が書きたいように記事を書いていても、狙うキーワードで検索上位には上がってきません。
まー当たり前の話ですが、検索意図を考えた記事、検索者が求める答えを返している記事でなければGoogleは評価してくれません。
そこで重要になるのが、Googleの検索結果です。
検索結果は、Googleがあるキーワードで検索した人が欲しいと思うであろう情報を提供しているので、何気なくみている検索結果の1ページ目はお宝の山なんです。
ここに気付けるかどうかが、アフィリエイトで成果を上げられるかどうかのポイントになります。
イケハヤ氏やはあちゅう氏のように、すでにフォロワーが沢山いるインフルエンサーであれば話は別ですが、アフィリエイトで収益を上げようと思えば、検索意図を意識して、SEOを意識した記事を書かなければ、Googleの検索結果の上位には上がってきません。
しかし、SEOを意識した雑記ブログを書いたとしても、アクセスを集められるようになるには、それなりの期間が必要ですし、成果が見えてくるまでに挫折するのが普通です。
そうやってこれまでもアフィリエイトに取り組んでは消えていった人は数知れず。
Googleはすべてを見通している?
Googleは検索者が求める情報を返してくれるようになってきたとはいえ、結果が検索者が求めているものと外れていることがあります。
いずれもっと検索の精度が上がってくるとは思いますが、検索結果の上位に表示したければ、検索者が考える検索意図に加えて、Googleの検索結果を分析する必要があるわけです。
Googleの検索結果をスクレイピング
アフィリエイトのスクールや塾では、SEO対策として、検索結果の1ページ目のサイトをしっかり読んで、それらの情報を網羅した内容を記事にするということを教えています。
これを実際に実践しようと思えば、リサーチにかなり時間がかかります。
実際にページを見て、タイトルやディスクリプション、H2などを書き出していくのはかなり手間ですよね。なので、
「なんとか自動で抜き出す方法ないかな〜?」
とネットをうろうろしていると、ありましたよ、目的のプログラムが!
Googleの検索結果の1ページ目のサイトのアドレス、タイトル、メタキーワード、サブスリプションをGoogleスプレッドシートに抜き出せるというもの。
コードを公開してくれてるので、
ほんと神か!
と思っちゃいました。
その上、PythonでGoogleスプレッドシートを扱うための初期設定まで丁寧に解説してくれています。
まさに神です!
たぬさんありがとうございます!
H2タグを抜き出すコードがない
ただね、H2タグ、H3タグを抜き出すコードが入ってないんです。
H2タグやH3タグって、見出しに使われていて、重要なキーワードが入っているので、上位表示されるサイトがどんなキーワードを使っているのか調べるには、H2タグやH3タグを調べる必要があります。
たぬさんが公開してくれているコードだけでも十分有用なんですが、H2タグ、H3タグも一緒に抜き出せるプログラムを作りたいと思っていろいろと試行錯誤した結果、なんとか抜き出せるPythonができたので、誰かの役に立てればと思って公開します。
import re
import json
import requests as rq
import lxml.html as lx
import gspread
from oauth2client.service_account import ServiceAccountCredentials
scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive']
credentials = ServiceAccountCredentials.from_json_keyfile_name('ここにこのパイソンファイルと同じ階層に置いたクレデンシャル秘密キーのファイル名', scope)
gc = gspread.authorize(credentials)
#用意したスプレッドシートキーを指定する
SPREADSHEET_KEY = 'ここにスプレッドシートキーを入れる'
worksheet = gc.open_by_key(SPREADSHEET_KEY).sheet1
#C3セルの値を検索クエリとして受け取る
search_query=worksheet.acell('C3').value
#requestsのget関数を使用して、Googleの検索結果画面(10位まで)の情報を抜き出す
r = rq.get('http://www.google.co.jp/search?hl=jp&gl=JP&num=10&q='+search_query)
html = r.text.encode() #コンテンツをエンコードする
root = lx.fromstring(html) #パース(lxmlでスクレイピングする準備をする)
#F6セルから下方向に記事URLを抜き出す
i=6
for a in root.cssselect('div#search h3.r a'):
worksheet.update_cell(i,6, re.sub(r'/url\?q=|&sa.*', '',a.get('href'))) #update_cell(行,列,上書きする値)
i = i+1
#I6セルから下方向に関連キーワードを抜き出す
i=6
for a in root.cssselect('p.aw5cc a'): #パース(lxml)したrootから下部の関連キーワードを取り出しbに代入
worksheet.update_cell(i,9,a.text) #変数の1つ目をセルI6にアップデート(関数のiは列で、9が行)
i = i+1
#F列に入力されているURLをクロールして、タイトル、要約、キーワードを抜き出す
#10位のサイトまで繰りかえす
for i in range(6,16):
try: # 古いサイトが読み込めないので無視する
search = rq.get(worksheet.acell('F'+str(i)).value) #acell('F6'.value) F6〜15セルの値をクロールする
search_html = search.text.encode(search.encoding) #encode(XXXX.encoding):読み込む前に文字化けするものに対応
#文字コードがUTFー8ならUTF-8でデコードしてパース
if(search.encoding=='utf-8' or search.encoding=='UTF-8'):
search_root = lx.fromstring(search_html.decode('utf-8'))
#文字コードがそれ以外は普通にパース
else:
search_root = lx.fromstring(search_html)
#タイトルの設定
list_title = []
for a in search_root.cssselect('title'):
list_title.append(a.text)
title=''
for index,item in enumerate(list_title):
if index==0:
title = item
else:
title = title + ', ' +item
worksheet.update_cell(i,3, title)
#ディスクリプションの設定
list_description = []
for a in search_root.cssselect('meta[name="description"]'):
list_description.append(a.get('content'))
description=''
for index,item in enumerate(list_description):
if index==0:
description = item
else:
description = description + ', ' +item
worksheet.update_cell(i,4, description)
#キーワードの設定
list_keywords = []
for a in search_root.cssselect('meta[name="keywords"]'):
list_keywords.append(a.get('content'))
keywords=''
for index,item in enumerate(list_keywords):
if index==0:
keywords = item
else:
keywords = keywords + ', ' +item
worksheet.update_cell(i,5, keywords)
#h2の設定
list_h2 = []
for a in search_root.cssselect('h2'):
list_h2.append(a.text)
h2=''
for index,item in enumerate(list_h2):
if index==0:
h2 = item
else:
h2 = h2 + '\n' +item
worksheet.update_cell(i,7, h2)
#h3の設定
list_h3 = []
for a in search_root.cssselect('h3'):
list_h3.append(a.text)
h3=''
for index,item in enumerate(list_h3):
if index==0:
h3 = item
else:
h3 = h3 + '\n' +item
worksheet.update_cell(i,8, h3)
except: #例外処理:古いサイトを読み込めなかったときにする処理H3だけ表示
worksheet.update_cell(i,8, 'H3タグが見つかりません。')
素人が書いたコードなので、動作保証はできません。
ここにこのパイソンファイルと同じ階層に置いたクレデンシャル秘密キーのファイル名
ですが、紹介した【たぬハック】の記事では、クレデンシャル秘密キーをいれるとなっていますが、Googleスプレッドキーに書き込むための権限を与えたときにダウンロードする【.json】で終わるファイル名を指定します。(.jsonを含める)
ここにスプレッドシートキーを入れる
の部分には、スプレッドシートを開いたときにブラウザのアドレスに表示される下記の部分を入力します。
Googleスプレッドシードのテンプレートはこちらをコピーしてお使いください。
https://docs.google.com/spreadsheets/d/156il4JfIdwfONWG6qvjkLUwJjjCV-KIh5kD4r5UJsTI/edit?usp=sharing
サジェストキーワードも欲しかったので、【searchkeyword】を参照してC18から下に表示されるように関数を入れています。
このことはこちらの記事で紹介しているので、ご覧になってみてください。
あと、I列にある【gsu】というのは、Googleの検索結果の下に表示される関連キーワードで10個表示されるのものを抜き出すようにしています。
PythonでGoogleスプレッドシートを使うための設定は、先程紹介した【たぬハック】の記事を参考にしてみてください。
とりあえず、動作している動画を作ってみたので載せておきます。
※もし、使ってみて、不具合が出たとしても自己責任とということを理解した上で利用してください。
文字化けを起こしていたり、AmazonやWikiのサイトはエラーが起こったりしているので、必要に応じてコードを書き換えてみてください。
なにぶん、私が独学で取り組んでいることなので、試行錯誤してPythonをうまく使いたいとおもって試行錯誤している人の役に立てれば幸いです。
この記事が気に入ったら、いいねしてくれると飛び上がって喜んじゃいますので、よろしくおねがいします。
いいなと思ったら応援しよう!
