[Python] 초간단! 파이썬 웹 크롤링

2024. 1. 30. 20:46Memorizing/Python

728x90

본 포스팅에서는 파이썬의 Beautifulsoup 라이브러리, requests 라이브러리, HTML 태그를 이용하여 웹 크롤링을 진행합니다.

아래의 코드를 실행하면 특정 URL로 부터 웹페이지에 있는 텍스트(멜론의 top100 차트 정보)를 가져올 수 있게 됩니다.

8번째 줄의 get함수는 지정된 URL로 HTTP GET 요청을 보내는 함수입니다. 즉, '지정된 URL에서 정보를 가져오겠다.'라고 웹페이지에 선언하는 것입니다.

8번째 줄의 data의 text 인자에는 지정된 URL의 웹페이지의 모든 텍스트가 들어가있는데, 9번째 줄의 BeautifulSoup에서 HTML parser를 이용하여 내용들을 잘라주는 역할을 수행합니다. 

from bs4 import BeautifulSoup
import requests
'''
스크래핑 하고 싶은 주소를 url에 넣어주세요
'''
url = "https://www.melon.com/chart/"
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')

아래의 코드는 BeautifulSoup의 HTML parser을 이용하여 텍스트를 parsing하는 코드입니다. select, select_one 함수는 CSS 선택자를 사용하여 HTML 문서에서 원하는 요소를 찾는 데 사용됩니다. 

trs = soup.select('table > tbody > tr')
for tr in trs[:1]:
    print(tr.select_one('.rank01 > span > a').text)
    print(tr.select_one('.rank02 > a').text)
    print(tr.select_one('.rank03 > a').text)
    print(tr.select_one('img')['src'])

본 포스팅에서는 노래 제목, 가수, 앨범, 앨범 커버 이미지를 가져오려고합니다. 따라서 해당하는 요소들의 선택자들을 웹페이지에서 찾으면 될 것입니다. 웹페이지에서 선택자를 찾기 위해선 "F12"키를 눌러 개발자 도구를 사용해야합니다.

지정된 URL로 접속해서 개발자 도구 창을 열면 아래의 그림과 같습니다. 그리고 좌측 상단의 마우스 모양을 클릭하고 웹페이지의 요소에 가져가면 그 요소가 담겨있는 코드를 쉽게 찾을 수 있습니다. 

우리가 원하는 노래 제목, 가수, 앨범, 앨범 커버 이미지의 정보는 'table' 태그 안, 'tbody' 태그 안, 'tr'태그에 있는 것을 알 수 있습니다.

태그들을 타고 들어가면, 노래 제목은 'rank01'의 'span' 태그의 'a' 태그에 있고,  가수는 'rank02' 태그의 'a' 태그에 있고, 앨범 정보는 'rank03' 태그의 'a'태그에 있고, 앨범 커버 이미지의 정보는 'img'의 'src'인자에 있다는 것을 알 수 있습니다. 

위의 코드를 실행하면 아래와 같은 결과가 출력됩니다.

Love wins all
아이유
Love wins all
https://cdnimg.melon.co.kr/cm2/album/images/114/04/142/11404142_20240123172248_500.jpg/melon/resize/120/quality/80/optimize