Python

5ちゃんねる(旧2ch)をスクレイピングする

5ちゃんねる(旧2ch)をスクレイピングする

Bru-nO / Pixabay

5ちゃんねる(旧2ch)という巨大掲示板はテキストデータの宝庫である。
そのデータを活用したい、分析したいと思っている人は多いのではなかろうか。
今回は5ちゃんねる(旧2ch)をスクレイピングする方法について触れてみる。



5ちゃんねるとは?

5ちゃんねるとは、昔で言う「2ちゃんねる」の事で、権力闘争やら権利の関係の末に「5ちゃんねる」という名に変わったものである。

2ちゃんねる(にちゃんねる)は、日本の電子掲示板である。2ちゃんねるは、略して「2ちゃん」、「2ch」などとも表記される。
1999年5月中に「ひろゆき」(西村博之)を名乗るネットユーザーの個人サイトとして開設。
2014年2月、2ちゃんねるの実質的管理権限が何らかの理由によりジム・ワトキンス(以下「ジム」)に移転、ジムが2ちゃんねるの実質的管理者となる。「ひろゆき」は対抗して「2ちゃんねる (2ch.sc)」を開設。これまでの「2ちゃんねる」は、区別が必要な文脈において「2ちゃんねる(2ch.net)」として表現される。
2017年10月1日、当時までの「2ちゃんねる(2ch.net)」が突如「5ちゃんねる」(ごちゃんねる)に名称変更、ドメイン名も「5ch.net」に変更された。
2ちゃんねる - Wikipedia

テーマ別に「板」と呼ばれるページが用意されており、板の中に様々なスレッドが立てられ、スレッドの中でユーザーが書き込みを行っている。内容は玉石混淆というかほとんどは価値のない石の方が多いが、大量のユーザーの意見が飛び交う集合知としての価値は計り知れない。


5ちゃんねるからデータを取得する方法

5ちゃんねるからデータを取得するにはスクレイピングを行う。
スクレイピングとは、APIのようなデータ配布手段を用いずにHTMLを解析してデータを取得する手段を指す。


Pythonでのスクレイピング方法

Pythonでのスクレイピングを行うには BeautifulSoup を用いる。
BeautifulSoup を使うことでHTMLから任意のタグを取得することができる。
下の例では2ch.scのメニューからニュースを含む板を取得している。

#モジュールのインポート
import urllib.request
from bs4 import BeautifulSoup
import re

#対象のサイトURL
url = "https://www.2ch.sc/bbsmenu.html"

#URLリソースを開く
res = urllib.request.urlopen(url)

#インスタンスの作成
soup = BeautifulSoup(res, 'html5lib')

#head内のタイトルタグを取得
site_title = soup.html.head.title
print(site_title.string)

#最初のaタグ
body_href = soup.html.body.a
print(body_href)
#<a href="http://2ch.sc/" target="_top">2chの入り口</a>

#「ニュース」を含むaタグ全部
body_href = soup.find_all("a", text=re.compile("ニュース"))
print(body_href)
#[<a href="http://ai.2ch.sc/newsalpha/">ニュース速報α</a>, <a href="http://ai.2ch.sc/newsalpha/">ニュース速報α</a>,...]


この手法で メニュー -> 板 -> スレッド と掘り下げて行けば5ちゃんねるのデータが取得できる。

参考
PythonでLet's Webスクレイピング! ①任意の要素の抽出 - Qiita
5ch(旧2ch)をスクレイピングして、過去流行ったネットスラングの今を知る - にほんごのれんしゅう


まとめ

  • 5ちゃんねるからデータを取得するにはスクレイピング
  • Pythonでスクレイピングするなら BeautifulSoup


コチラもオススメ

KRSW

駆け出し機械学習エンジニア。機械学習、DB、WEBと浅く広い感じ。 Junior machine learning engineer. Not a specialist but a generalist who knows DB, WEB too.

役に立ったらシェアしてくれると励みになります。

にほんブログ村 IT技術ブログへ

-Python
-,

Translate »

Copyright© ITips , 2020 All Rights Reserved.