概要
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/
