240319 TIL #350 Python 크롤링 복습

김춘복·2024년 3월 19일
0

TIL : Today I Learned

목록 보기
350/571

Today I Learned

오늘은 크롤링을 사용할 일이 있어서 예전에 배웠던 파이썬을 복습하면서 다시 만져봤다.


크롤링(웹스크래핑)

beautifulSoup4(bs4) 패키지를 사용.
bs4은 크롤링을 위한 강력한 라이브러리다. 주로 HTML 및 XML 형식의 문서를 파싱하고 조작하는 데 사용되고, 웹 페이지에서 특정 요소를 선택하고 해당 요소의 텍스트, 속성 등을 추출할 수 있다.

단계

  1. 웹 페이지를 가져오기
    requests 또는 urllib 같은 라이브러리를 사용하여 웹 페이지의 HTML을 가져온다.

  2. BeautifulSoup을 사용하여 HTML을 파싱합
    BeautifulSoup 객체를 생성하여 HTML을 파싱하고, 파싱된 HTML을 조작한다.

  3. 원하는 요소를 선택
    find(), find_all(), select() 등의 메서드를 사용하여 HTML에서 원하는 요소를 선택

  4. 선택한 요소에서 데이터를 추출
    선택한 요소에서 텍스트, 속성 등을 추출하여 필요한 작업을 수행

requests bs4 패키지 필수 설치!

예시1

import requests
from bs4 import BeautifulSoup

# 웹 페이지 가져오기
url = 'https://example.com'
response = requests.get(url)
html = response.text

# BeautifulSoup을 사용하여 HTML 파싱
soup = BeautifulSoup(html, 'html.parser')

# 원하는 요소 선택하여 데이터 추출
title = soup.find('title').text

print("웹 페이지 제목:", title)

예시2

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('ulr주소입력',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')

# soup이라는 변수에 "파싱 용이해진 html"이 담긴 상태가 됨.
# 이후 코딩을 통해 필요한 부분을 추출하면 된다.

# 한 개만 가져올 때, 원하는 링크에다 copy selector하고
변수명 = soup.select_one(‘카피한셀렉터’)

# Print(변수명)하면 전체 다. print(변수명.text)하면 제목만. print(변수명[‘href’])하면 그 앞에꺼만.

# 여러개 가져 올 때 셀렉터에 중복된걸 확인 후, 변수 세우고 중복된 걸 select
# 그 변수에 리스트로 쭉 들어간 데이터를 반복문으로 추려내서 원하는 데이터 도출!
movies = soup.select('#old_content > table > tbody > tr')

for movie in movies:
    a = movie.select_one('td.title > div > a')
    if a is not None:
        print(a.text)

  • .strip() 붙이면 여백 제거해서 깔끔하게 나옴.

  • .text[0:2] 붙이면 텍스트만 앞에서 2글자만 끊기.

profile
Backend Dev / Data Engineer

0개의 댓글