webスクレイピングをして、検索上位記事がアフィリエイトリンクを貼っているかどうか判別してみる!

webスクレイピングをして、検索上位記事がアフィリエイトリンクを貼っているかどうか判別してみる!

今回の記事は、前回記事の応用になります。よかったらこちらもご覧ください!

前回は、web上のページ内に貼られているリンクを取得して、それにコメントをつけてCSVファイル保存する流れをやっていきました。

今回は、検索した上位記事に、アフィリエイトリンクがどれくらい貼られているか。というのをwebスクレイピングを通して探していこうと思います。

最終ゴールの確認

そもそも何がしたいのかって話なんですけど。

例えば、

「転職 おすすめ」

などのキーワードでGoogle検索をしたときに、10個くらいの記事が表示されますよね?

それらの記事のなかに、アフィリエイトリンクが貼ってあるかどうかを、記事情報をスクレイピングすることで判別していこうと思います。

今回は僕も使ってるa8-netのリンクを特に調べていきます。

最終的にはこんな形で、アフィリエイトコードをサイトごとに抽出していきます。

使用するライブラリ

今回使用するライブラリはこちら。

  • BeautifulSoup
  • requests
  • pandas

前回と一緒なので、説明は割愛します。

スクレイピングする検索ワード

アフィリエイト記事を書いていくときに、競合他社を調べることがあるんですけど、それを簡単にしてくれるものを作るのが今回のゴールです。

なので、実際に記事を書くことを想定するような検索ワード

例えば

  • 転職 おすすめ
  • 副業 初心者
  • プログラミングスクール おすすめ

などの検索結果を見いていこうと思います

実際にスクレイピングしていく

今回は先に書いたコードを貼っておきます

from bs4 import BeautifulSoup
import requests
import pandas as pd
from google.colab import files

def get_search_results_df(keyword):
  columns = ['rank','title','url', 'affiliate_url']
  df = pd.DataFrame(columns=columns)
  html_doc = requests.get('https://www.google.co.jp/search?num=10&q=' +keyword).text
  soup = BeautifulSoup(html_doc, 'html.parser')
  tags = soup.find_all('div',{'class':'kCrYT'})
  rank = 1
  for tag in tags:
    try:
      title = tag.text
      print(title)
      url = query_string_remove(tag.select("a")[0].get("href").replace("/url?q=",""))
      affiliate_url =  get_a8_links(url) # 作成したコードの追加
      se = pd.Series([rank, title, url, affiliate_url], columns)
      df = df.append(se, ignore_index=True)
      rank += 1
    except:
      continue
  return df

def query_string_remove(url):
  return url[:url.find('&')]

def get_a8_links(url):
  html_doc = requests.get(url).text
  soup = BeautifulSoup(html_doc, 'html.parser') # BeautifulSoupの初期化
  tags = soup.select("a")
  urls = ""
  for tag in tags:
    try:
      url = tag.get("href")
      if url.find("https://px.a8.net/") > -1:
        urls += url + "/n"
    except:
      continue
  return urls

最初に下準備として、使用するライブラリのインポートと、出力用のデータフレームを作成しておきます

この行列の中に、スクレイピングしていったデータを入れていくイメージです

次に、今回使用する検索ワードでの、HTMLデータをテキストで取得します

そうすると、このように、テキストの状態でページ内容が取得できますので、このリンク部分を探していきます

そしたらこのような画面が見つかりました!

確認したいURLは、<div class=”kCrYT”>のものなので、ここを取得します

そうするとこのように取得できました

ここから、selectと配列の知識を使って、URLのみを取り出していきます

すると、エラーが発生しました。

list index out of range

って書いてあるので、リスト関係がおかしいようです

いったんリストを書き出してみることにします。

そうすると、このように、空のリストが何個か出てきています。

どうやら、リストの中身が空だった場合の逃げ道を作ってあげないとここではエラーが発生してしまうようなので、try-exceptでリストが空のときの逃げ道を書いておきます。

そうすると

無事にURLだけ取り出すことができました。

これだけではURLは正常に動作しないので、このURLを綺麗にする関数を用いて整理しておきます。

これらの一連の流れをいったんまとめるとこんな感じです。

from bs4 import BeautifulSoup
import requests
import pandas as pd
from google.colab import files

def get_search_results_df(keyword):
 columns = ['rank','title','url', 'affiliate_url']
 df = pd.DataFrame(columns=columns)
 html_doc = requests.get('https://www.google.co.jp/search?num=10&q=' +keyword).text
 soup = BeautifulSoup(html_doc, 'html.parser') # BeautifulSoupの初期化
 tags = soup.find_all('div',{'class':'kCrYT'})
 rank = 1
 for tag in tags:
   try:
     title = tag.text
     url = query_string_remove(tag.select("a")[0].get("href").replace("/url?q=",""))
     affiliate_url = ""
     se = pd.Series([rank, title, url, affiliate_url], columns)
     df = df.append(se, ignore_index=True)
     rank += 1
   except:
      continue
 return df
 
def query_string_remove(url):
 return url[:url.find('&')]

”転職 おすすめ”

というキーワードで検索したときの結果がこちら

ここからようやく、アフィリエイトコードを抽出する作業に入ります。

ってやろうと思ったんですけど、スクレイピングって、作業するwebサイトに負荷をかけるそうなので、今回も僕のブログを使って練習したいと思います。

使っている記事が、ワインをたしなむ記事しかないので、そこから持ってきたいと思います笑

ほい!

正真正銘僕のブログです。

これのアフィリエイトコードは下の方にあるはず・・・

ありましたありました!

この

https://px.a8.net/

ってやつがまさしく探し求めていたアフィリエイトコードです。

find関数を利用して、このURLだけ抜き出します。

関数で内容をまとめて実装するとこんな感じ

はい!!!

無事、アフィリエイトコードだけ取り出すことができました。

見事に一つだけでしたね笑

最後に、ここまでの過程すべてを関数にして、まとめたのが最初に書いておいたソースコードになります。

実際にはコードを書いていく中で、いろんなエラーが発生するので、それを処理するためにいろいろググったり、改善したりしたのですが、

大まかな流れはこんな感じになります。

あとは、様々なキーワードで分析をするだけです。

僕はアフィリエイトは、自分のメイン収入ではないのですが、記事を書くときは今回の関数を使って、競合を調べてみるのも面白いと思いました。

最後にCSVファイルにまとめておしまいですが、これは前回と同じ工程なので割愛します。

結果のまとめ

実際にスクレイピングしてみた結果のCSVファイルの中身をスクショとして残します

転職 おすすめ

想像しているより少ないと思ったのですが、今回試しているのはa8だけでした。


副業 おすすめ

副業系はやはり多いですね。闇ですね


英会話教室

「おすすめ」「比較」のキーワードが入ってるやつはアフィコードありですね


プログラミングスクール 初心者

上位トップ5はa8入っていません。

こんな感じでした!

これだけでも、アフィリエイトをしている人からしたら、結構有益な情報が得られると思います。

以上です!ご精読ありがとうございました!