複数のブログ記事から特定ワードを検索する方法(Python)【プログラムしたことない人向け】

この記事は約7分で読めます。

Python(プログラミング言語)を使いますがコピペで誰でもできます。
インストールなしでPythonが実行できるGoogle Colaboratoryを使って
複数のブログ記事から特定のワードが入っているか確認する方法です。
ブログをやっていて記事が増えてくると
どの記事に書いたか調べたくなることありませんか?
そんなときブログ全体でキーワード検索する方法です。

数行のプログラムです。
私のパソコンWindowsなのでWindowsでの話していますが
Web上で動くのでMacでも動きます。

注意点

このプログラムはスクレイピングにあたるプログラムです。
【スクレイピング】違法にならないサービスパターン5選を読んでから利用しましょう。
自分のサイトでは問題ないと思います。
ただし、やりすぎるとレンタルサーバーに負荷が、かかりすぎる可能性もあります。
自分のサイトで転送量に制限があると
他の人が自分のサイトにアクセスできなくなる可能性もあります。
3分以上プログラムが終了しないようだったら
実行ボタンをもう1回押して止めましょう。
またSEO的に不自然なアクセスと判断され悪影響あるかはわかりません。
私が自分のアナリティクスやSearch console見る限り全く影響してません。
アクセス数にもカウントされてない。

Pythonとは

初心者に優しいプログラミング言語ですが
できることはたくさんあります。
自分のパソコンに開発環境をインストールして使うこともできます。
今回はgoogleがウェブ上に用意しているGoogle Colaboratory を使用します。 

Python使用上の注意点

pipというコマンドがあります。
プログラムで使えるようにライブラリをインストールする命令ですが
悪意のあるライブラリもインストールできてしまうので
pipを使う前にはそのライブラリについて調べてからつかいましょう。
便利そうな機能なのにググっても極端に情報が少ない場合はやめましょう。

またこの記事と矛盾しますが
内容を理解しないでコードをコピペして実行するのは危険です。
悪意のある人が作っているかもしれません。

Google Colaboratory とは

ブラウザから Python を記述、実行できるサービスです。
無料です。
Web上ですべて完結するのでインストールも不要で
パソコンへは何も影響ありません。
Googleアカウントがあれば使えます。

Google Colaboratory を立ち上げる

プログラムの例として私のブログ6ページの中から
「アドセンス」という単語があるページを抽出します。
このサンプルプログラムのurlと検索ワードを変更するだけで応用できます。

Google Colaboratory をクリックします。
ファイル→ノートブックを新規作成

ファイル名*.ipynbで*の部分は任意に変更してください。そのままでもいい。
下のプログラムを1ブロックずつ貼り付けてください
+コードで空のブロックが追加されます。

実行

Windowsの場合f3キーを押すとページ内検索できるので
本当に文字が含まれているか確認してみてください。

ノートブックを閉じた後も
プログラムは保存されているので
ファイル→ノートブックを開くから再度読み込めます。
目次へ

プログラム

このままコピーして貼り付ければ動きます。
貼り付けるときは右クリックが使えないので
キー操作でCtrl+v(Ctrlキーとvキーを同時押し)で貼り付けてください。
3つに分けたほうがブロック単位で実行できるので扱いやすいです。
最初のブロックは1回実行するだけで何度も実行する必要はありません。
別に何度実行してもかまいません。
ほかの2か所は変更したときなど何度でも実行できます。

from bs4 import BeautifulSoup
import requests
import time
all_links=['https://kikuichige.com/7966/',
'https://kikuichige.com/7166/',
'https://kikuichige.com/5492/',
'https://kikuichige.com/4802/',
'https://kikuichige.com/4091/',
'https://kikuichige.com/3794/']
kword='アドセンス'
for page in all_links:
    time.sleep(1)
    res=requests.get(page)
    soup = BeautifulSoup(res.text, "html.parser")
    if kword in soup.text:
       print(page)

自分用に変更する部分は 赤で書いた2か所です。
all_links=[‘ 調べたいアドレスを,(カンマ)で区切って入れる ‘]
何個でも増やせます。
kword=’調べたいワード

エラーが出たりうまくいかないとき

  • 漢字やひらがなカタカナ以外の英数字記号が全角になっていないか?
  • インテンド(先頭からのスペース)はサンプルプログラムと同じか?
    Pythonはインテンドで命令のかかる範囲を表しているので重要です。
  • サイトの種類によっては読み込んだ時に文字化けしてる場合がある(対策は後述します)

プログラム解説

簡単に処理内容を解説しておきます。
流れだけわかるようにしてるので、かなり乱暴な解説です!

from bs4 import BeautifulSoup
import requests
import time

プログラムで使うライブラリを読み出しています。
ライブラリとはプログラムの本体で
これを読み込むことでプログラマーは簡単な記述だけで
複雑なことができます。
Pythonはたくさんのライブラリがあるので便利です。

all_links=['https://kikuichige.com/7966/',
'https://kikuichige.com/7166/',
'https://kikuichige.com/5492/',
'https://kikuichige.com/4802/',
'https://kikuichige.com/4091/',
'https://kikuichige.com/3794/']

all_linksという変数(リスト)に調べたいページのurlを代入

kword='アドセンス'        
for page in all_links:         #all_linksの要素を1個ずつ取出しpageに入れ    
                    #以下のインテンドされた部分の処理を繰り返す
    time.spleep(1)                      #1秒待つ
    res=requests.get(page)       #pageにアクセスし結果をresに入れる
    soup = BeautifulSoup(res.text, "html.parser")  
                    #Beautifulsoupでresを分析できるようにする
                      #結果をsoupに入れる
  if kword in soup.text:       #soupのテキストにkwordが含まれてる?
       print(page)           #yesの場合そのpageを出力

コードのブロックを追加してsoup.textと入力し実行すると
最後のページの分析に使ったソースが出てきます。
最初一部しか表示しませんが最後の…をクリックすると全部表示します。
もしここで漢字が1文字も出ていないときは文字化けしてるので
res.textをres.contentにして再度実行してみてください。
目次へ

サーバーへの負荷が気になる場合

以下のように2つに分けて処理を少し変更すると
手動と同じスピードになります。

kword='アドセンス'
i=0
res=requests.get(all_links[i])
soup = BeautifulSoup(res.text, "html.parser")
if kword in soup.text:
    print(all_links[i])
i+=1

MENTAやってます(ichige)

コメント

タイトルとURLをコピーしました