4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Pythonでリコール情報をスクレイピングしてmongoDBに保存

Last updated at Posted at 2019-05-17

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

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?