過去ログ一覧を取得するスクリプト(Python3.8)

過去ログβだと検索がしょぼくヒットしないことがある
なので過去ログ取得用にスクリプト書いたので共有

  • 環境
    python3.8
    requestsとpandasが必要
    (Linuxで動作確認)
インストール

python3.8をインストール
あとは

pip install requests pandas

をターミナルに入力すれば準備終わり
以下のコードをutf-8で貼り付けて保存

環境を汚したくなくてvenv使うなら以下をやってからインストール

  1. 共通
python3 -m venv .venv
  1. 各OSに合わせて
  • Windows

    .venv\Scripts\activate.bat
  • Linux

    source .venv/bin/activate
スクリプト本体

python3 保存した名前.py で実行すればcsvが生成されます

import urllib
import time

import requests
from bs4 import BeautifulSoup
import pandas as pd

URL = "https://maguro.2ch.sc/poverty/kako/"
xpath_str = "//tbody/tr/td[4]/a/@href"
log_file_name = "poverty_subject_log.txt"

r = requests.get(URL)
# ログのURLリスト作成
soup = BeautifulSoup(r.content, "lxml")
link_list = soup.select("a")
url_list = [urllib.parse.urljoin(URL, i.get("href"))
            for i in link_list if "subject.txt" in i]

# ログ全体を取得してcsvに(BE番号はなかったらそのまんま空)
reg_pattern = r'(\d+).dat<>(.*)[\s\t]*\[*(\d*)\]*\s+\((\d+)\)$'
for url in reversed(url_list):
    r_subjects = requests.get(url)
    # NOTE: r_subjects.contentだとデコードでcp932でもshift-jisでも引っかかる謎ファイルがあるのでtextにした(o1405/subject.txt)
    text = r_subjects.text
    tmp_df = pd.Series(text.splitlines()).str.extract(reg_pattern, expand=True)
    tmp_df.to_csv('thread_list.csv', mode='a+')
    with open(log_file_name, "a+") as f:
        if r_subjects.apparent_encoding:
            f.write(url + "," + r_subjects.apparent_encoding + "\n")
        else:
            f.write(url + "," + "\n")
    time.sleep(5) #NOTE: Gone行きやCloudflare回避のためにゆっくり寝かす 本来はちゃんとヘッダ細かく設定したほうがいいがだるい