1. 웹 크롤링 시 필요한 라이브러리

크롤링을 위해서는 requests와 BeautifulSoup 라이브러리가 필요하다. 라이브러리 다운로드 명령어는 다음과 같다.

pip install bs4
pip install requests

BeautifulSoup은 웹 페이지의 정보를 쉽게 가져올 수 있는 기능을 제공하고, requests는 http 요청을 보낼 수 있는 기능을 제공한다.


2. 크롤링 기초

- 2-1. 아래의 영화 페이지에서 랭킹, 영화 제목, 별점을 추출해보도록 하자.
image

- 2-2. 영화 제목에서 우클 -> 검사를 클릭하면 개발자 도구가 뜬다. 복사 -> selector 복사 시 조금 더 쉽게 원하는 html을 추출해 올 수 있다.
image

- 2-3. 복사해온 selector를 print 했을 때 아래와 같은 결과가 나온다.
image

- 2-4. 우리가 원하는 건 하나의 결과가 아니라 여러 개의 리스트라서 tr 전체를 select 해온다. html을 잘 파싱해오는 것을 확인할 수 있다.
image

- 2-5. 그 이후 for문으로 원하는 정보 추출
image


전체 코드

    # 1. 필요한 라이브러리 import
    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'}
    
    # 2. 아래 주소로 get 요청을 보낸다
    data = requests.get('https://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=pnt&date=20230202', headers=headers)

    # 3. 응답받은 데이터를 BeautifulSoup 객체 형태로 생성 및 반환한다
    soup = BeautifulSoup(data.text, 'html.parser')

    # 웹페이지 접속 -> 개발자 도구 -> 특정 html 선택 -> 복사 -> selector 복사
    a = soup.select_one('#old_content > table > tbody > tr:nth-child(3) > td.title > div > a')
    # print(a.text)
    # print(a['href'])

    trs = soup.select('#old_content > table > tbody > tr')
    # print(trs)

    for tr in trs :
        a = tr.select_one('td.title > div > a')
        if a is not None : # if title != None과 같다
        title = a.text
        rank = tr.select_one('td:nth-child(1) > img')['alt'] # html의 속성을 가지고 올 때는 []를 쓴다
        point = tr.select_one('td.point').text
            
        print(rank, title, point);