웹 스크래핑(크롤링)을 하는 법 정리!
Beautiful Soup은 Python 프로그래밍 언어를 사용하여 HTML 및 XML 문서를 파싱하고 데이터를 추출하기 위한 파이썬 라이브러리! HTML과 XML은 웹 사이트 및 다른 네트워크 프로토콜에서 자주 사용되는 문서 형식이며, Beautiful Soup은 이러한 문서에서 데이터를 추출하는 데 사용된다!
1. 폴더에 Beautiful Soup 패키지 설치하기
pip install bs4
*구글에 Beautiful Soup Doc 검색면 사용가이드 확인 가능!
모든 라이브러리는 이런 식으로 필요한 기능을 찾아보고 사용 doc을 확인하면서 정해진 언어를 참고하여 적용할 수 있다.
2. 크롤링 기본 세팅
import requests
from bs4 import BeautifulSoup
URL = "크롤링 해올 페이지 url"
headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
data = requests.get(URL, headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
3. 원하는 영역 가져오기
title = soup.select_one("카피해온 부분 통째로").text
# soup.select_one 원하는 값만 가져오고 싶을 때
# 가져온 데이터는 html의 뼈대이기 때문에 .text()를 사용해서 문자 값만 꺼내줌
print(title)
# print() 터미널로 잘 들어왔는지 확인해보기
*지니뮤직 인기차트 웹페이지 크롤링 사용 예시 코드
import requests
from bs4 import BeautifulSoup
headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
data = requests.get('https://www.genie.co.kr/chart/top200?ditc=M&rtm=N&ymd=20210701',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
# 순위, 곡 정보, 가수 정보
#body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.number
#body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.info > a.title.ellipsis
#body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.info > a.artist.ellipsis
trs = soup.select('#body-content > div.newest-list > div > table > tbody > tr')
for tr in trs:
rank = tr.select_one('td.number').text[0:2].strip()
title = tr.select_one('td.info > a.title.ellipsis').text.strip()
# strip() 텍스트 앞뒤로 여백 없이 보여주고 싶을 때
artist = tr.select_one('td.info > a.artist.ellipsis').text
print(rank, title, artist)
*결과값
*bs4 요약
# 선택자를 사용하는 방법 (copy selector)
soup.select('태그명')
soup.select('.클래스명')
soup.select('#아이디명')
soup.select('상위태그명 > 하위태그명 > 하위태그명')
soup.select('상위태그명.클래스명 > 하위태그명.클래스명')
# 태그와 속성값으로 찾는 방법
soup.select('태그명[속성="값"]')
# 한 개만 가져오고 싶은 경우
soup.select_one('위와 동일')
'What I Learnd' 카테고리의 다른 글
git/gitHub 으로 협업하기 step by step (0) | 2023.05.18 |
---|---|
SwiperJS 슬라이드 라이브러리 사용해보기 (0) | 2023.05.17 |
git & github으로 협업하기 (git 기초) (0) | 2023.05.16 |
mongoDB 사용하는 법 & pymongo 요약 (0) | 2023.05.04 |
서울시 실시간 날씨 받아오기 Open Weather Map API (0) | 2023.05.03 |