2
3

More than 3 years have passed since last update.

Pythonで食品のリコール情報をスクレイピングして、pandasデータフレームを作ってみた

Posted at

pythonの学習記録をつけてみようと思い、Qittaを始めてみました。
仕事は非IT企業なので、、pythonは本当に趣味・・・というか、興味本位で学習しています。

今は、食品衛生に関わる仕事をしているので、pythonを使って何か出来ないかな〜と思い、食品のリコール情報をデータ分析してみよう!と思い立ちました。

その第一段階として、スクレイピングで食品リコール情報のデータフレームを作ってみました。データの元はリコールプラスというサイト。

food_recall_info.py
from bs4 import BeautifulSoup
import requests
import re
import csv
import time
import pandas as pd

def recalls(url):
    res = requests.get(url)
    soup = BeautifulSoup(res.text, 'html.parser')
    recall_soup = soup.findAll("tr",{"class":{"return","info","apology"}})

    campany_list = []
    recall_list = []
    action_list = []
    recall_date = []

    for j in range(len(recall_soup)):
        #会社名を取得
        campany_list.append(recall_soup[j].find("a", href=re.compile("/company/*")).get_text())
        #リコール内容
        recall_list.append(recall_soup[j].find("a", {"style":"float:left"}).get_text())
        #対応方法
        keyword = re.compile(r'回収|回収&返金|回収&返金/交換|回収&交換|返金|交換|点検&交換|お知らせ|景品表示法違反|お詫び|返金/交換|送付')
        action_list.append(re.search(keyword, str(recall_soup[j])).group())
        #発生日
        recall_date.append(recall_soup[j].find("td", {"class":"day"}).get_text().replace("\n        ","20"))
    return campany_list,recall_list,action_list,recall_date

campany_lists = []
recall_lists = []
action_lists = []
recall_dates = []

for i in range(1,20):
    resl = recalls("https://www.recall-plus.jp/category/1?page={}".format(i))
    campany_lists.extend(resl[0])
    recall_lists.extend(resl[1])
    action_lists.extend(resl[2])
    recall_dates.extend(resl[3])

recall_df = pd.DataFrame({'会社名':campany_lists,'リコール内容':recall_lists,'対応':action_lists,'発生日':recall_dates})

実行結果


recall_df.head()
会社名   リコール内容  対応  発生日
0   神戸物産    業務スーパー ほしいもスティック一部商品に樹脂片の混入 回収  2020/03/17
1   丸文  丸文 国産大豆使用よせ豆腐 消費期限誤表示 回収  2020/03/17
2   イオン常陸大宮店... 豚肉ロース味付トンテキ用 アレルゲン()表示欠落   お詫び   2020/03/18
3   ツルヤ   軽井沢店 おいしい白身魚フライ アレルゲン乳成分表示欠落 回収  2020/03/16
4   畑中鯉屋    畑中鯉屋 鯉甘煮 アレルゲン小麦の表示欠落   回収  2020/03/13

見た目上は、pandasのデータフレームに収納出来た・・・と思います。

はじめは、データフレームにその都度上場を書き込もうかと思ったけれど、やり方がわからずに断念。一先ず、それぞれの列のリストを作ってから、pandasに取り込む格好にしてみました。

ど素人なので、なんかの一つ覚えではじめはappend()で値を追加していました。しかし、それだとリスト形式で追加されてしまい、うまくpandasに取り込めませんでした。

色々調べてみると、リストの中の値だけを追加するには、extend()を使えばよいと分かりました。

一つ勉強になりました。

無事データも作れたので、データ分析をしてみたいと考えています。
今このデータで、分析出来そうな事は、
①リコールが起きた時の回収や返品の割合
②リコールが起きやすい時期はあるのか?

でしょうか。
色々試行錯誤してみたいと思います。

2
3
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
2
3