Pythonを使ってWebスクレイパーを作る
この記事では,Pythonを使ってWebスクレイパーを作ることを目的としています.
今回は,ココオルのつぶやきを集めるというスクレイパーを作成していきます.
2回に分けて解説していきます.
環境準備
インストールするもの
- requests : Webページの情報を取得するのに使用
- BeautifulSoup : WebページのHTMLから必要な情報を抽出するのに使用
pip install beautifulsoup4
pip install requests
pip install html5lib
ライブラリのインポート
.py
from bs4 import BeautifulSoup
import requests
import html5lib
import time #収集の際に時間間隔をあけるために使用
Webページの構造の確認
https://cocooru.com/mutters?page=1
を開き,アクセス後F12キーを押し,左上の矢印をクリック後,カーソルを知りたい部分に合わせます.
今回はユーザー名,テキスト,日付を収集してみましょう.
プログラムの作成
.py
jsonl = []
for num in range(1, 3): #最大25550ページ
base_url = "https://cocooru.com/mutters"
params = {"page": num}
res = requests.get(base_url, params = params) #URLとページ番号より,HTMLを取得
soup = BeautifulSoup(res.text, "html5lib") #beautifulsoupにより,HTMLを読込
span = soup.find_all("span", class_="userName") #<span class="userName">ユーザー名が記載されている
body = soup.find_all("div", class_="entry-body") #<div class="entry-body">コメントが記載されている.
div = soup.find_all("div", class_="controller") #日付が記載されている部分
for n in range(len(span)):
username = span[n].text.strip() #不要な空白文字などを最後に削除
comment = body[n].text.strip()
date = div[n].find_all("li")
datetime = date[1].text.strip()
jsonl.append({"username":username, "comment" : comment, "datetime" : datetime})
time.sleep(1) #一回URLにアクセスするたびに1秒間の間を置く
収集した結果
[{'username': 'じゅん',
'comment': '眠いよ\n\n\nとおもうけどあんたが悪いんやでってツッコミが頭ん中でビシッと入る',
'datetime': '2023-02-13 09:21'},
{'username': 'じゅん',
'comment': 'はぁ……( - - `)\n\n\n支度しなきゃ',
'datetime': '2023-02-13 09:21'},
{'username': 'じゅん',
'comment': 'やりすぎてからわかるけど朝きついし疲れていきたくないし私突っ走るすぐに\n\n止めてほしい',
'datetime': '2023-02-13 09:19'},
{'username': 'あ.',
'comment': '弱音を吐ける場所があれば永遠に吐き続けちゃう気がする',
'datetime': '2023-02-13 08:17'},
{'username': '志雨',
'comment': '私が愛を受け取れないだけ?\nそんなことないよ、愛されたら嬉しいって思うの当然でしょ?',
'datetime': '2023-02-13 07:53'},
{'username': '志雨',
'comment': 'なんでこんなにやってるのに満たされないの?愛されないの?幸せになれないの?',
'datetime': '2023-02-13 07:53'},
{'username': '志雨',
'comment': '気も遣ってるし相手が喜ぶことを率先してする、ご飯だってよそうし水だって人数分注ぐ、タオルだって取りに行くし忘れ物取ってくるのについていってあげる\nなんで?',
'datetime': '2023-02-13 07:53'},
{'username': '志雨',
'comment': 'いつも笑顔で外ではポジティブに振る舞って相手の話も聞くし悪口なんて言わない、キレたりしないし不機嫌にもなってない。たまにネタを流してみんなを笑わせることだってできる\nなんで愛されないの?',
'datetime': '2023-02-13 07:49'},
{'username': '志雨',
'comment': '「愛される条件」\nみたいなの当てはまってるけど愛されないのなんで?',
'datetime': '2023-02-13 07:47'},
{'username': '狭',
'comment': 'でも健全な人といても自分がどんどん周りから乖離していくみたいになったり…',
'datetime': '2023-02-13 07:25'}]