Tech이야기~!
welcom 자세히보기

Computer/Python

분기별 역대 라면 랭킹 스크랩핑(크롤링) 코드 : 파트2

Enhold 2020. 3. 22. 05:07

2020/03/21 - [Daily Life/Review] - 분기별 역대 라면 랭킹 ~! 판매순위 2011-2019

 

분기별 역대 라면 랭킹 ~! 판매순위 2011-2019

안녕하세요!!! 한끼 식사로 역시나 라면만큼 음식은 없죠.. 이젠 한국인들은 봉지라면 컵라면 한먹어본사람이 없을 정도입니다. 바로 순위들어가도록하져 그럼 시작해보겠습니다! 만약 데이터모으는 코딩이 필요하..

figureking.tistory.com

파이썬을 이용한 스크리팽(Scraping) 크롤링 코드입니다. 

라면 주제로 찾다보니여기 까지 왔네요. 차트 만드는 코드는 추후에 올리도록 하겠습니다. 

갑자기 날짜페이지 중에 데이터가 없는게 있어서 예외처리하는데 찾느냐 고생했네요. 

 

2020/03/21 - [Computer] - 'NoneType' object has no attribute 'find_all'

 

'NoneType' object has no attribute 'find_all'

try: <실행할 문장1> <실행할 문장2> <실행할 문장3> ... except [발생오류[as 오류 메세지 변수]]: <오류를 무시하고 실행할 문장1> <오류를 무시하고 실행할 문장2> <오류를 무시하고 실행할 문장3> ... 위의 구..

figureking.tistory.com

 

front_url =" https://www.atfis.or.kr/sales/M002020000/view.do?searchItem=CD00000573&searchDivision=CD00000600&searchCompany=2&searchYear="
table(front_url)
result​
from bs4 import BeautifulSoup
import requests
import csv
from datetime import datetime
import pandas
import pandas as pd
import itertools

dt_index = [2011,2012,2013,2014,2015,2016,2017,2018,2019]
dt_list=[1,2,3,4]
result=[]

def table(front_url) :
    for j in dt_index :
        for i in dt_list :
            try :
                url = front_url+ str(j) +"&searchQuarter=" + str(i) + "&selectAccessHistoryIdx="
                print(url)
                con = requests.get(url)
                soup = BeautifulSoup(con.content, 'lxml')
                infoTable = soup.find("table",{"class":"table_view2"}) # <table class="table_develop3">을 찾음

        #         infolist.append(i)
                infoPrint =[]   # 데이터를 저장할 리스트 생성
                for a in infoTable.find_all("tr"):
                    infolist = []
                    infolist.append(j)
                    infolist.append(i)

                    for b in a.find_all("td"):
                        info = b.get_text().replace("\r\n", "").replace("\t","").replace(" ","")
                        infolist.append(info)

                    #print(infolist)
                    infoPrint.append(infolist)
                    
                del(infoPrint[0:2])
                print(infoPrint)
                result.append(infoPrint)
            except AttributeError as e:
                print(e)
                pass
            



# print(result)​

result1=list(itertools.chain(*result)) #차원 변경
data = pd.DataFrame(result1)
data.columns = ['year', 'quater','maker', 'name', 'total','백화점','할인점','체인슈퍼','편의점','독립슈퍼','일반식품']
data=data[['maker','name', 'total','year', 'quater','백화점','할인점','체인슈퍼','편의점','독립슈퍼','일반식품']]
data=data.set_index('maker',inplace=False)
data=data.drop(index=['Etc', 'Total'])

data.to_csv("ramen.csv", encoding='cp949')

해당 코드이용해서 CSV 파일을 만들고 차트나 그래프를 사용하시면 됩니다. 

전 차트 애니메이션을 만들어봤어요.