【Python】ブログ初心者のキーワード選びをサポートするツールを作った


キーワード選びをサポートするツールのソースコード

python3 hogehoge.py 引数(キーワード)の形式で実行すると
googleの検索上位10件を取得し

  • 順位
  • 記事タイトル
  • URL
  • h2/h3タグ

の順でコンソールに表示します。

まだまだ改善の余地ありです。

今回、reccomend部分を排除するために、articleタグ内部だけを抽出しているため
サイトによっては何も取得できない場合があります。

また、manablogさんがちょっと苦手で、うまく取得出来てないです。。。
(検索上位の常連さんで、めちゃくちゃ参考になるサイトなのに取得出来なくてかなり勿体無い。。。)

どなたか良い案があったらえび(@ebi_ebidence)まで連絡ください。

参考サイトはこちら↓
【Python】SEO対策に使うため上位100サイトをさくっと抽出するツールを作ってみる
(ほとんどこちらのサイトのプログラムを流用して、h2/h3タグの取得部分を追加した形になります。)

import sys#ターミナルの引数を返してくれる
import pyperclip
import requests
import bs4
import csv
import datetime

#キーワードの受け取り(引数から。なければクリップボードから)
if len(sys.argv) > 1:
    search_url_keyword = ' '.join(sys.argv[1:])
else:
    search_url_keyword = pyperclip.paste()
print('【検索クエリ】{}'.format(search_url_keyword))

#検索順位取得処理
if search_url_keyword and search_url_keyword.strip():
    #Google検索の実施
    search_url = 'https://www.google.co.jp/search?hl=ja&num=10&q=' + search_url_keyword
    print("[INFO]Googleにアクセスしました")
    res_google = requests.get(search_url)
    print("[INFO]検索結果の取得に成功しました。")
    res_google.raise_for_status()
    #BeautifulSoupで掲載サイトのURLを取得
    bs4_google = bs4.BeautifulSoup(res_google.text, 'html.parser')
    link_google = bs4_google.select('div > h3.r > a')

    for i in range(len(link_google)):
        #なんか変な文字が入るので除く
        site_url = link_google[i].get('href').split('&sa=U&')[0].replace('/url?q=', '')
        site_title=bs4_google.select('div > h3.r > a')[i].text#textで中身抽出。stringでもいいけど今回はnoneが返る
        
        if 'https://' in site_url or 'http://' in site_url:
            #サイトの内容を解析
            print("rank: " + str(i+1))
            print("title: " + site_title)
            print("url] " + site_url)
            try:
                

                #各サイトのh2とh3を取得
                res_site = requests.get(site_url)
                bs4_site = bs4.BeautifulSoup(res_site.text, 'html.parser')
                content_site = bs4_site.find("article")
                headers = content_site.find_all(['h2', 'h3'])
                for attribute in headers:
                    if(attribute.name == "h2"):
                        print("h2 is :" + attribute.text)
                    if(attribute.name == "h3"):
                        print("h3 is :" + attribute.text)
                
            except:
              continue
            
print("ok")#終わり

1 個のコメント

  • コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

    このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください