過去にMixiに書いた数百件の日記をExportしたいと思った。
Pythonで各ページのHTMLを保存しておけば、あとはそのうち適当にまとめられるか、と思って試してみたが、ログイン周りが意外と難しい。
ReCaptcha (v3)あたりがいい仕事をしている気がする。なんか弾かれる。
セッションクッキーを抜き出してどうこうすれば、というのも試してみたけれど、初めてでコツが分からなさすぎてどうにもならない。
結局、ReCaptchaさんに通していただくために、ログインだけは手動でやることでなんとかなった。
import time
import chromedriver_binary
import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get('https://mixi.jp/')
username = driver.find_elements(By.NAME, "email")[0]
password = driver.find_elements(By.NAME, "password")[0]
username.send_keys('<ここにメールアドレス>')
password.send_keys('<ここにパスワード>')
#input()で待機させて、ログインボタンは自分で押す。ログインできたらターミナルになにか入力してページのダウンロード処理に進む
print('Type anything after logging in.')
val = input()
# このあとに、ページのダウンロードなどの処理を書く。
# 私の場合は事前に日記のURL一覧を作成しておき、それを順に読んでいる。
df_url_path = <URL一覧のパス>
df = pd.read_csv(df_url_path)
urls = df['URL'].to_list()
for url in urls:
driver.get(url)
html = driver.page_source.replace('euc-jp', 'utf-8') #注:下記
output_path = <保存先フォルダ名> + url[33:43] + '.html'
with open(output_path, 'w') as f:
f.write(html)
time.sleep(4)
driver.quit()
#注1: SeleniumはUTF-8でダウンロードしてくるので、HTMLの中のエンコーディングの記載の方を置き換えている。