レンタル掲示板のteacup.が8月1日で終了
90年代からインターネットを始めた人なら見かけたことはあると思う掲示板。
様々なサービスの黎明期にあって、残っていた老舗がサービス終了になるようです。
お知らせはわかったけど、バックアップは?
【重要なお知らせ】teacup. byGMOのサービス終了につきまして※追記あり(2022/3/25)(3月01日 14時00分)
いつもteacup.をご利用いただき、誠にありがとうございます。
長年にわたりご愛顧いただきましたteacup.ですが、2022年8月1日(月)13:00をもちまして、サービスを終了させていただくこととなりました。
昔からある掲示板に書き込んだログと送信した写真を取得するツールや方法は、特に用意されていないようで、自力で行うようですね。
掲示版の記事を他のサイトに移行したい
誠に恐れ入りますが、掲示板記事のデータ移行する機能は、弊社でも検討をさせていただきましたが、ご提供は難しいとの判断にいたりました。
https://support.teacup.com/hc/ja/articles/4544682345497-掲示版の記事を他のサイトに移行したい
どうやってデータ取得する??
コレ困る人多いと思いますよ、なんせ古参のひとや、お年寄りのコミュニティだったりするから。そんな人らに「・・・あんまり騒ぐな!・・・わかったな・・・」という内容はさすがにキツイ。
案の定、実家からなんとかしてほしいと連絡がありました。
pythonとseleniumがあれば、、なんとかできるかな、、、
本題の救出用のpythonコードです
簡単な仕様
- teacup.から文章と写真を取得する
- python(3.10.1)とseleniumを使ったスクレイピング
- Chromeドライバを使って自動操作する
入出力
- 入力:取得する掲示板のURL ・・(直接コードに記述)
- 出力:ローカルPCに写真とテキストを取得
実行環境
動作方法
- 以下のソースコードをパイソン形式で、任意のフォルダに保存して下さい
tcGetFile/
└ tc_Scraping.py
↓ソースコード
from selenium import webdriver
import uuid
import requests
import os
driver = webdriver.Chrome()
driver.get('https://XXXXX.teacup.com/YYYYYY/bbs')
txt = driver.find_element_by_xpath('//*[@id="contents"]/center[2]/table/tbody/tr/td[2]/form[1]').text
maxPage = int(txt.replace('/', '').replace(' ', ''))
maxPage += 1
new_path = "img"
if not os.path.exists(new_path):
os.mkdir(new_path)
fileBufStr = ""
for i in range(1, maxPage):
pageNum = driver.find_element_by_xpath('//*[@id="contents"]/center[2]/table/tbody/tr/td[2]/form[1]/input[1]')
pageMov = driver.find_element_by_xpath('//*[@id="contents"]/center[2]/table/tbody/tr/td[2]/form[1]/input[2]')
for element in driver.find_elements_by_xpath('//*[@id="contents"]/table'):
fileBufStr += element.text
fileBufStr += "\n"
print(element.text)
imgs = element.find_elements_by_tag_name('img')
for index, img in enumerate(imgs):
imgurl = img.get_attribute('src')
imgfile = imgurl.split('/')[-1].replace('M', '')
src = "/".join(imgurl.split('/')[:-1]) + "/" + imgfile
responce = requests.get(src)
with open("img/" + "{}".format( str(uuid.uuid4())[:6] + imgfile ), "wb") as f:
f.write(responce.content)
pageNum.send_keys()
pageNum.send_keys( str( i+1 ) )
pageMov.click()
f = open('myfile.txt', 'w',encoding='utf-8', errors='ignore')
f.write(fileBufStr)
f.close()
driver.close()
driver.quit()
- ★1に取得したい掲示板のアドレスを入れてください
driver.get('https://XXXXX.teacup.com/YYYYYY/bbs')
- VScodeで保存した.pyを実行します。
-
Chromeが自動起動して、取得処理が始まります。
フォルダ内に次々写真が取得されていたり、★2のログが取得できていたらOKです
-
終了すると、下記のようにimgフォルダ内に投稿画像と、myfile.txtのテキストができあがります。写真名は上書きしないようにUUIDを混ぜた名前にしています。
tcGetFile/
├ img
│ └ aaa.jpg, bbb.jpg・・・・他
├ myfile.txt
└ tc_Scraping.py
結果の確認方法
取得したい掲示板に戻って 最初と最後が取得して合っているか
テキストを使って確認してください。
おわりに
実装経験のない中で、見よう見まねで記述しました。
お気づきの人がいましたら、このコードを発展させていって
効率よく誰かの役に立っていただけたら幸いです。