#概要
PythonのライブラリBeautifulsoupを使ってリコール情報をスクレイピング。
・スクレイピング対象サイト
消費者庁リコール情報サイト https://www.recall.caa.go.jp/
このページのから特定メーカーの家電に関するリコール情報をスクレイピングしてmongoDBに保存する。
#最初に確認
サイトの利用規約ページを確認してスクレイピングしても問題が無いかを確認。
消費者庁リコール情報サイト このサイトについて
当ウェブサイトで公開している情報(以下「コンテンツ」といいます。)は、どなたでも以下の 1)~6)に従って、複製、公衆送信、翻訳・変形等の翻案等、自由に利用できます。商用利用も可能です。
大丈夫そう。
#ライブラリのインポート
必要なライブラリをインポート。
import requests
from bs4 import BeautifulSoup
from pymongo import MongoClient
#ページ件数をスクレイピング
今回のページでは家電カテゴリを選択するとhttps://www.recall.caa.go.jp/result/index.php
というphpにscreenkbn=01&category=2
とパラメータが渡された。このページのhtmlからページの全件数をスクレイピングして取得する。
url_get = "https://www.recall.caa.go.jp/result/index.php?screenkbn=01&category=2"
html = requests.get(url_get)
bsObj = BeautifulSoup(html.text,"html.parser")
for link in bsObj.findAll("p"):
text = str(link.get_text())
if "件中" in text:
page = text.split("件中")[0]
#特定メーカーの情報をスクレイピング
今回は特定メーカーの情報のみ欲しいので、下記URLで特定メーカーの名前で検索。
https://www.recall.caa.go.jp/result/index.php?screenkbn=01&category=2
しかし、表示されるURLはhttps://www.recall.caa.go.jp/result/index.php
で、正しいhtmlが取得できない。パラメータはPOSTされているみたい。
そこでChromeデベロッパーツールで中身を確認し、POSTして無事にhtmlを取得。
あとは欲しい情報が含まれるタグをみつけてスクレイピングしてmongoDBに保存する形式に整形する。
url_post = "https://www.recall.caa.go.jp/result/index.php"
payload = {'search':'特定メーカーの名前', 'category':'2','screenkbn':'01','viewCountdden':page}
html = requests.post(url_post, data=payload)
bsObj = BeautifulSoup(html.text,"html.parser")
for link in bsObj.findAll("tr"):
i = 0
title = ""
publicationDate = ""
startDate = ""
url = ""
# tdタグ
for link_info in link.findAll("td"):
a = link_info.findAll("a")
link = str(link_info.findAll("p"))
link_array = link.split("\"")
# URLの取得
if len(link_array) > 1:
url = "https://www.recall.caa.go.jp" + link_array[1]
text = link_info.get_text()
# 件名の取得
if i == 2:
title = str(text)
# 掲載日の取得
if i == 3:
publicationDate = text
# 対応開始日の取得
if i == 4:
startDate = text
i += 1
# mongoDBに保存する形式に整形
data = {"title":title, "publicationDate":publicationDate, "startDate":startDate, "url":url}
save_data(data)
#mongoDBに保存
PymongoでデータをローカルのmongoDBに保存。
def save_data(data):
client = MongoClient('localhost', 27017)
db = client.db
co = db.recall_info
co.insert(data)
#参考文献
Beaurifulsoupについての記事
[https://qiita.com/itkr/items/513318a9b5b92bd56185]
(https://qiita.com/itkr/items/513318a9b5b92bd56185)
ChromeデべロッパーツールでPOSTされたデータの中身を確認する方法
https://www.tsukimi.net/chrome-developer-tools_post.html
PyMongo - MongoDB API
https://api.mongodb.com/python/current/