見出し画像

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を含める)

ここにスプレッドシートキーを入れる
の部分には、スプレッドシートを開いたときにブラウザのアドレスに表示される下記の部分を入力します。

画像1

Googleスプレッドシードのテンプレートはこちらをコピーしてお使いください。

https://docs.google.com/spreadsheets/d/156il4JfIdwfONWG6qvjkLUwJjjCV-KIh5kD4r5UJsTI/edit?usp=sharing

画像2

サジェストキーワードも欲しかったので、【searchkeyword】を参照してC18から下に表示されるように関数を入れています。

このことはこちらの記事で紹介しているので、ご覧になってみてください。

あと、I列にある【gsu】というのは、Googleの検索結果の下に表示される関連キーワードで10個表示されるのものを抜き出すようにしています。

画像3

PythonでGoogleスプレッドシートを使うための設定は、先程紹介した【たぬハック】の記事を参考にしてみてください。

とりあえず、動作している動画を作ってみたので載せておきます。

※もし、使ってみて、不具合が出たとしても自己責任とということを理解した上で利用してください。

文字化けを起こしていたり、AmazonやWikiのサイトはエラーが起こったりしているので、必要に応じてコードを書き換えてみてください。

なにぶん、私が独学で取り組んでいることなので、試行錯誤してPythonをうまく使いたいとおもって試行錯誤している人の役に立てれば幸いです。

この記事が気に入ったら、いいねしてくれると飛び上がって喜んじゃいますので、よろしくおねがいします。

アフィリエイトから仮想通貨に関係することまで幅広く取り扱っています。サポートいただけるよう有益な記事を投稿していきます。