【Python】ブログ内検索ツールの作り方

※ 当サイトではアフィリエイト広告を利用しています。リンクは広告リンクも含みます。

この記事は約5分で読めます。
広告

自分のブログ内で検索できるWEBアプリを作りました。作り方の紹介です。
特徴は

  • ワードとHtml両方検索可能。なので期限切れの広告を探すのに便利。
  • 検索ワードに近い見出しのリンク先が取得できる。
  • 記事を1つのcsvファイルに、まとめたものを使うのでデータベース不要。
  • 今回、WEBアプリとして公開しているが、公開せず自分だけで使用できる。

残念なところ

  • 立ち上がりが遅い
  • クラッシュする。(2つ同時に立ち上げるとクラッシュするので多分、複数の人がアクセスすると壊れるのかも)復活するには、開発者(私)によるRebootが必要。

ということでWEBアプリとして使いものになりません。

今回つくったもの
イチゲブログ内検索(テキストのみ版) 簡易版こちらで試してください。csvファイルに記録するものをテキストのみにしてファイル容量を5.4Mbから2.1Mbに減らしました。これで立ち上がりは速くなりました。(1分以内)
イチゲブログ内検索(追記2023/5/20Streamlitのメモリをたくさん使って頻繁にクラッシュするのでクラウドは停止しています) 完全版ですが立ち上がるまで数分かかります。右上にRunning…と出て表示ボタンが表示されていない場合はお待ちください。Oh no.Error running app~が出ている場合、クラッシュしているので私がリブートするまで直りませんので、ご了承ください。

詳細は以下のZenn本参照 ↓↓

広告

注意事項

  • コードを理解してから実行してください。
  • あくまで私のブログで、うまくいった方法なので、設定等の違いにより思わぬ不具合(記事の削除とか)が起きるかもしれませんので自己責任で実行してください。
  • スクレーピングをする対象の利用規約でスクレーピング禁止になっていないか確認してください。例えばYoutubeの場合は禁止になっています。Youtubeの利用規約
    youtub利用規約抜粋 3、自動化された手段(ロボット、ボットネット、スクレーパなど)を使用して本サービスにアクセスすること。
  • サーバーに負荷がかかるため十分、間を置いて必要以上のアクセスをしないようにしましょう。
  • アクセス数の制限のあるレンタルサーバーもあるのでブログで使っているレンタルサーバーにアクセスしすぎると制限されるかもしれません。
  • googleアドセンスもロボットによる不正アクセスと認定され広告制限されるかもしれません。
  • GitHubにpublicでプッシュするとコードは公開になるので、公開するコードに重要な情報は書かないようにしましょう。
  • 公開を考えている場合スクレーピングするときは念のためWordPressからログアウトしてやったほうがいいと思います。
  • pandasの1要素に入れる記事本文のHTMLの量は無駄に多くならないほうが速く処理できます。
  • Streamlitでは立ち上がるまで時間がかかるため本格運用は厳しいかもしれません。

使用方法

Id属性選択(通常、見出しで使われているので検索ワード近くの見出しへジャンプできます。)

id=”セレクトした文字列が含まれるところへのリンクを抽出します。全部表示したい場合、全部を選んでください。
今回、私のブログの場合id=”toc~”が見出しで使われているタグのid属性なので、tocとしています。id属性は各Html内で唯一なのでかぶることはありません。

検索ワード

検索したいワード(半角で複数キーワードを書いてAND検索もできます。例python Django 全てのキーワードが含まれているページから第一引数で検索します。完全一致なので半角、全角は区別されます)

重複URL削除

チェックすると検索結果に重複したURL(#toc含む)がある場合は表示しません。

結果表示

上段は検索ワードの第一引数の前後40文字分を表示しています。(空白や改行なども含んでいます。)
下段は検索ワードが含まれるページもしくはページ内の見出しへのリンクです。見出し以外のところでid属性を使っている場合で、その要素がない場合はクリックしてもページトップへいきます。

使用例

広告コードの一部で検索すると、その広告の貼ってある見出しの記事リンクが検索できます。期限切れの広告を探すときに便利です。
以下はもしもアフィリエイトの広告コードです。これをブログ内から探す場合。コード全部ではなく唯一そうな部分だけを検索ワードに入力すれば検索できます。下の例では赤字部分。

<a rel="nofollow noopener" target="_blank" href="https://px.a8.net/svt/ejp?a8mat=略" data-nodal=""><img decoding="async" loading="lazy" border="0" width="468" height="60" alt="" src="https://www24.a8.net/svt/bgt?aid=201215386089&amp;wid=002&amp;eno=01&amp;mid=s00000018318001019000&amp;mc=1"></a>

結果
” src=”https://www24.a8.net/svt/bgt?aid=201215386089&amp;wid=002&amp;eno=01&
https://kikuichige.com/2534/#toc12

ブログURL一覧を習得する方法

詳しくは、こちらに書いてあります。

一部抜粋です。こちらの方法でデータフレームを作りcsvにします。

その後、以下のコードでurlの一覧リストが取得できます。

#ichige.csvからURLのリスト化方法
import pandas as pd
df7 = pd.read_csv('C:\\Users\\abc\\ichige_count\\ichige.csv',index_col='タイトル')
site_list=df7['URL'].values.tolist()

この記事を書いたイチゲを応援する
Vプリカでのお支払いがおすすめです。
MENTAやってます(ichige)

コメント

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