Coding/Python

[Python] 파이썬을 활용한 웹크롤링 방법 (Feat. PyCharm)

잇뉴얼 2022. 6. 6. 17:18
728x90
반응형

[Python] 파이썬을 활용한 웹크롤링 방법 (Feat. PyCharm)


목표 : 파이썬을 활용한 웹크롤링
▶ requests, BeautifulSoup
라이브러리 이름 설명
requests 파이썬으로 http 통신이 필요한 프로그램을 작성할 때 가장 많이 사용되는 라이브러리
BeautifulSoup 웹 페이지의 정보를 쉡게 스크랩할 수 있도록 도와주는 라이브러리
PyCharm 라이브러리 사용 방법

파이참 프로그램 왼쪽 상단을 보면 '파일'탭이 보입니다. 여기로 들어가주세요.

설정화면에서 왼쪽 목록에 '프로젝트: 프로젝트명'을 클릭하면, 오른쪽 화면에 'Python 인터프리터'버튼이 보입니다. 여길 눌러주세요.

오른쪽화면에 설치되어있는 패키지를 볼 수 있습니다. 여기서 오른쪽 화면의 왼쪽 상단에 작은 '+'버튼을 눌러주세요.

상단에 'bs4'를 입력하면, 해당 패키지가 검색됩니다. 'bs4'가 바로 'Beautiful Soup'입니다. 왼쪽하단에 '패키지 설치' 버튼을 눌러주면, 패키지가 설치가 진행됩니다.

다음은 'requests'를 검색해주고, 해당 패키지를 선택한 다음, 왼쪽 하단에 '패키지 설치'버튼을 눌러줍니다.

반응형
Python 코드 작성
import requests
from bs4 import BeautifulSoup

일단 최상단에 해당 라이브러리를 사용하기 위해 임포트를 해줍니다. 

# URL을 읽어서 HTML를 받아오기
# 요청시 User-Agent 정보를 크롬으로 지정
requests_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'}
# HTML 조회 요청
data = requests.get('URL 입력',headers=requests_headers)

requests_headers를 지정하는 이유는 사이트에 따라 사람이 아닌, 컴퓨터가 접근하는것을 막게 설계가 되어있을수 있는데요. 이때 컴퓨터가 아닌 사람이 접근하는것처럼 하기 위한 정보를 넣는다 생각을 하시면 됩니다. 

# requests로 얻은 html을 문자열로 변환, html 파서 사용
soup = BeautifulSoup(data.text, 'html.parser')

# 이후 추가 코드를 작성해서 원하는 방식으로 데이터 사용

requests를 통해 얻은 html을 'BeautifulSoup()'함수를 이용해 python이 읽을수 있도록 파싱(parsing)을 해줍니다. 소괄호'()'안을 보면, 일단 html을 문자열로 변환하고, 어떤 파서(parser)를 사용할것인지 확인을 하게 되는데요. 'html.parser'는 파이썬에 내장되어있는 파서(parser)로 설치 필요없이 사용할 수 있습니다.

용어 설명
파싱 (parsing) 문장이나 데이터문자열 (html, json 등)에서 원하는 데이터를 분석하여 추출하는 기술
파서 (parser) 파싱을 수행하는 프로그램
코드 사용 예시 - 네이버 영화 랭킹 사이트에서 영화제목 데이터 추출
import requests
from bs4 import BeautifulSoup

# User-Agent를 크롬으로 지정
requests_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://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=pnt&date=20220606',headers=requests_headers)

# requests로 얻은 html을 문자열로 변환, html 파서 사용
soup = BeautifulSoup(data.text, 'html.parser')

# select를 이용해서 old_content > table > tbody 태그 안에 있는 tr 태그 찾기
movies = soup.select('#old_content > table > tbody > tr')

# movies (tr들) 의 반복문을 돌리기
for movie in movies:
    # movie 안에td.title > div 태그 안에 있는 a를 찾아 a_tag 변수에 할당
    a_tag = movie.select_one('td.title > div > a')
    if a_tag is not None:
        # a의 text를 찍어본다.
        print (a_tag.text)
        
# 결과
밥정
그린 북
가버나움
...

 

코드 설명
soup.select("태그") 해당되는 태그들을 리스트 방식으로 저장한다.
soup.select_one("태그") 해당되는 태그 하나를 선택
여기서 태그 찾는 방법

네이버 영화 랭킹 사이트

네이버 영화 랭킹 사이트를 예로 들어보겠습니다. 해당 사이트에 들어간 다음, 키보드에서 'F12'키를 눌러서, 개발자 모드를 실행해주세요. 크롬(Chrome)기준으로 개발자 화면의 왼쪽 상단을 보면 네모에 마우스포인터가 있는 모양의 버튼이 보입니다. 이 버튼을 눌러주고, 사이트에서 원하는 영역을 선택하면 해당 영역의 태그를 확인할 수 있습니다. 

해당 태그에 마우스 오른쪽 버튼을 눌러, 'Copy - Copy selector'를 눌러주면, 해당 영역의 태그(부모 태그 포함)해서 복사를 해줍니다.

EX> #old_content > table > tbody > tr:nth-child(2) > td.title > div > a

 

반응형