本アサブロで自分が書いた過去記事を検索したくなることがある。
しかし、本ブログの検索はあまり簡単ではないようだ。
以前は自分でブログ画面をすべてコピペする方法で過去記事のテキスト化を行い検索に利用していたが、コピペ時間と手間が大変だった。
Pythonをインストールしてあったので、ChatGPTにPythonを使った過去記事のログ保存プログラムを作ってもらった。数回のやり取りで動くプログラムができた。
なお、本プログラムの利用条件は下記の2点である。
(1)ブログのテキストデータのみ対象とする。
(2)アサブロの記事のレイアウト形式はツールバー 下 本文 上
((2)については、ログ保存時のみこのレイアウトとし、保存後他の形式にしても問題はない。このログ保存の実行時間は10年分(テキストファイルで1.5MB)で30分程度だった。)
以下にChatGPTとのQ&Aで修正を重ねて作成できたPythonプログラムを示す。
なお、下記のプログラムの中で
abcdefg:アサブロのurlの個人名部分
xxxxx:pythonを標準インストールした場合のusers内のフォルダ名
である。
*********************************
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin
from datetime import datetime
BASE_URL = "
[URL]"
OUTPUT_FILE = r"C:\Users\xxxxx\2510AsabloSchsho\asablo_all.txt"
def fetch_page(url):
res = requests.get(url)
res.encoding = "utf-8"
return BeautifulSoup(res.text, "html.parser")
def get_article_links(archive_url):
"""アーカイブページから記事リンクを取得"""
soup = fetch_page(archive_url)
links = []
for a in soup.select("h2.msg-title a"): # ←ここが重要
href = a.get("href")
if href:
full_url = urljoin(archive_url, href)
links.append(full_url)
return links
def scrape_article(url):
"""記事ページから本文抽出"""
s = fetch_page(url)
title_tag = s.select_one("h2.msg-title")
title = title_tag.get_text(strip=True) if title_tag else ""
date_tag = s.select_one("span.msg-date")
date = date_tag.get_text(strip=True) if date_tag else ""
body_tag = s.select_one("div.msg-body div.pos")
body_text = body_tag.get_text("\n", strip=True) if body_tag else ""
return title, date, body_text, url
def main():
articles = []
current_year = datetime.now().year
# 2013年から現在までの年/月を順に処理
for year in range(2013, current_year + 1):
for month in range(1, 13):
archive_url = f"{BASE_URL}{year}/{month:02d}/"
res = requests.get(archive_url)
if res.status_code != 200:
continue # 存在しない月はスキップ
links = get_article_links(archive_url)
for url in links:
title, date, body, link = scrape_article(url)
articles.append(
f"Title: {title}\nDate: {date}\nURL: {link}\nBody:\n{body}\n{'-'*60}\n"
)
with open(OUTPUT_FILE, "w", encoding="utf-8") as f:
f.writelines(articles)
print(f"保存完了: {OUTPUT_FILE}")
if __name__ == "__main__":
main()
このプログラムを実行することで、2510AsabloSchsho内にasablo_all.txtテキストファイルが作成され、2013年からの自分の記事が年月順にテキストデータとして保存される。
内容は
・記事タイトル
・年月日
・リンクurl
・記事本文
である。
以下に本ブログの最新の2記事分のみ結果を示すが、2013のみ変更すれば他の年から現在までの記事のファイルがasablo_all.txtに書き込まれる。
セコメントをする