반응형
# 본프로그램은 정적인 웹페이지를 크롤링 하는 프로그램입니다.
# 작성 시작일자 2021. 03. 19
# 작성자 이성재
# 할리스매장 클롤링연습01
# 프로그램명 HollysBeautifulSoup.py
# 첫페이지만 크롤링하는 예제
import requests
from bs4 import BeautifulSoup as bs
import pandas as pd

html = requests.get('http://web.codetector.co.kr:8080/kmview/bigdata01.do')
soup = bs(html.text,'html.parser')

# 크롤링 할 영역을 찾는다
tbody_tag = soup.find('tbody') # tobdy태그에 들어감
print(tbody_tag) # 출력 : <tbody id="data_uniq1"> <tr class="t....

# 반복되는 영역을 찾는다 (findAll로 찾으면 데이터가 배열형태로 저장된다)
tr_tag_list = tbody_tag.findAll('tr') # tr을 전부 찾아서 list에 넣는다
print(tr_tag_list) # 출력 : [<tr class="tr_...   tr_tag값 확인해보기
print(len(tr_tag_list)) # 출력 : 10   tr_tag_list 속에 몇개 인지

# 크롤링한 결과가 최종적으로 저장되는 변수배열
result = []

for tr_tag in tr_tag_list: # tr_tag_list에서 하나씩 순차적으로 값을 꺼내온다.

    # td 태그중에 각각의 영역에 해당하는 데이터를 저장한다.
    zone    = tr_tag.find('td',{'class':'text-center zone'}).text # 지역
    store   = tr_tag.find('td',{'class':'text-center store'}).text # 매장명
    open    = tr_tag.find('td',{'class':'text-center open'}).text # 현황
    address = tr_tag.find('td',{'class':'text-center address'}).text # 주소
    tel     = tr_tag.find('td',{'class':'text-center tel'}).text # 전화번호

    # 각각의 변수에 잘 저장되어 있는지 확인을 해본다
    # print(zone + "," + store + "," + open + "," + address + "," + tel)

    # 변수배열에 순차적으로 저장한다.
    result.append([zone, store , open , address, tel])



# pandas 라이브러리를 이용해 csv파일로 저장
print(result[0]) # 출력: ['서울 서대문구', '신촌점', '영업중', '서울특별시 서대문구 연세로 34 (창천동 31-12)  할리스', '02-393-2004']
# result값이 배열이므로 배열값중 하나(첫번째)를 화면에 표시해본다.
bigdata_table = pd.DataFrame(result, columns=('zone','store','open','address','tel'))
bigdata_table.to_csv("HollysCSV.csv", encoding="utf-8", mode ='w' ,index = True) # ./ 자기 밑에

 

request.get으로 주소를 가져옵니다 그리고 그 주소에 해당하는 HTML태그를 가져옵니다

Tbody태그에 있는 tr줄이 10개 이므로 각각 td와 해당 클래스명으로 접근해서 10번 반복해줍니다.

반복하는 와중에 해당 텍스트값을 빈 리스트에 append해서 여러개 리스트값으로 보관합니다.

 

이제 이걸 csv파일로 저장해보도록하겠습니다.

그걸 위해 필요한게 pandas패키지입니다. import해주세요

 

 

  • bigdata_table =pd.DataFrame(result, columns=('zone','store','open','address','tel'))
  • pd.DataFrame(넣을자료, columns=('각 세로줄 제목들...'))
    • csv파일을 만들 구성입니다

 

  • bigdata_table.to_csv("HollysCSV.csv",encoding="utf-8",mode ='w',index = True
  • to_csv("파일명", encoding="인코딩방식", mode="작성모드", index= = True)
    • table자료를 csv로 변환시키면서 이름을 지어주고 encoding방식 mode는 ='w' write여야 겠죠?
반응형