Python - Beautiful_soup으로 크롤링하기

JM·2020년 6월 3일
0

Python

목록 보기
5/5

웹크롤링이란?

  • 웹 사이트를 분석하여 원하는 데이터를 추출하는 과정을 뜻합니다.

Beautiful_soup이란?

  • 크롤링을 도와줄 오픈소스 라이브러리 입니다. 정규표현식을 사용해서 크롤링한 데이터(html, xml등)내에서 원하는 부분을 추출할 수 있도록 도와줍니다.

Requests

  • requests 모듈이란 HTTP Request를 웹 브라우저가 아닌 python에서 HTTP 관련된 작업을 편리하게 할 수 있도록 해주는 모듈입니다.

Csv

  • CSV란 Comma-separated values의 약자로서 CSV 파일은 각 라인의 컬럼들이 콤마로 분리된 텍스트 파일 포맷입니다. 가장 간단한 형태의 CSV 파일은 문자열을 콤마로 Split 하여 처리합니다

크롤링 해보기

목표 : 빌보드 top 100차트에서 순위, 노래 제목, 가수의 데이터를 가져와 csv파일에 저장을 시켜본다

#requests,csv 사용전 import해준다
import requests
import csv

#beautiful_soup사용전 import해준다
from bs4 import BeautifulSoup

#csv를 사용하여 만들 파일명을 정한다.
csv_filename="billboard_test.csv"

#csv 객체를 만들어 내용을 저장하는 옵션을 정해준다.
csv_open = open(csv_filename,"w+",encoding='utf-8')
csv_writer = csv.writer(csv_open)

#제일 첫줄에 목차의 개념으로 한 줄 작성한다.
csv_writer.writerow(('rank','title','singer'))

#beautifulsoup으로 billboard top 100의 데이터를 받아온다
bill_board =requests.get("https://www.billboard.com/charts/hot-100").text
bs = BeautifulSoup(bill_board, 'html.parser')

#해당 웹페이지의 경우 ol태그안에 li태그가 반복되며 그 안에 순위,가수등의 데이터가 반복되는 형태이기 때문에 li태그들을 찾아준다.
chart_list = bs.select('ol>li')

#print(chart_list)

#for문을 통해 내가 가져온 덩어리에서 필요한 부분(순위,제목,가수)들을 찾는다.
#find,find_all,select를 상황에 맞게 잘 사용해야한다. 
#최대한 좁은 범위를 찾는 것이 중요하다.


for article in chart_list:
    span_rank = article.find_all('span')
    span_title = article.select('span.chart-element__information>span')

    rank = span_rank[1].text
    title = span_title[0].text
    singer = span_title[1].text

    print("rank= ",end=""),print(span_rank[1].text)
    print("title=",end=""), print(span_title[0].text)
    print("singer=",end=""), print(span_title[1].text)
	#print("image_url=", end=""), print(span_title)

#가져온 데이터를 csv 파일에 넣어준다
    csv_writer.writerow((rank,title,singer))

#csv를 종료한다.
csv_open.close()

0개의 댓글