過去ログ一覧を取得するスクリプト(Python3.8)
過去ログβだと検索がしょぼくヒットしないことがある
なので過去ログ取得用にスクリプト書いたので共有
- 環境
python3.8
requestsとpandasが必要
(Linuxで動作確認)
インストール
python3.8をインストール
あとは
pip install requests pandas
をターミナルに入力すれば準備終わり
以下のコードをutf-8で貼り付けて保存
環境を汚したくなくてvenv使うなら以下をやってからインストール
- 共通
python3 -m venv .venv
- 各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回避のためにゆっくり寝かす 本来はちゃんとヘッダ細かく設定したほうがいいがだるい