본문 바로가기
Research/Python

BeautifulSoup_Basics

by RIEM 2023. 3. 25.
728x90

Install

pip install bs4
pip install requests
pip install lxml

Basics

bs4는 requests와 lxml 파서에 의존한다. 여러 라이브러리에 의존하기 때문에 프로젝트가 고도화되면 bs4를 잘 쓰지 않는다.

from bs4 import BeautifulSoup
import requests

# 1) Fetch the pages (obtained a response object)
result = requests.get('www.google.com')

# 2) Page content
content = result.text

# 3) Create soup
soup = BeautifulSoup(content, "lxml")

# 4) Finding elements with bs4
soup.find(id="specific_id")

soup.find('tag', class_="class_name")

# article 태그 내 h1 태그 찾고싶은 경우
soup.find('article', class_="main_article")
soup.find('h1')

# 모든 h2 엘리먼트 찾기 -> list 반환 [el1, el2, el3, ...]
soup.find_all("h2")

get HTML 

bs4로 간단히 HTML 전부 스크래핑하기

from bs4 import BeautifulSoup
import requests

website = 'https://subslikescript.com/movie/Budapest_Noir-5161018'
result = requests.get(website)
content = result.text

# 해당 페이지의 html을 가져오기
soup = BeautifulSoup(content, 'lxml')
print(soup.prettify())

 

가져온 데이터를 어떻게 파싱할 것인가?

1. ID
2. Class name
3. Tag name, CSS Selector
4. Xpath

이 순으로 파싱을 하면 인생이 편하다.

간단한 웹사이트 스크래핑하여 txt로 저장하기

from bs4 import BeautifulSoup
import requests

website = 'https://subslikescript.com/movie/Budapest_Noir-5161018'
result = requests.get(website)
content = result.text

# 해당 페이지의 html을 가져오기
soup = BeautifulSoup(content, 'lxml')

# 파이썬 클래스와 구별해주기 위해 class_ 라고 기재해줌
box = soup.find('article', class_='main-article')

title =box.find('h1').get_text()

transcript = box.find('div', class_='full-script').get_text(strip=True, separator=' ')

# w(writing) 모드로 열기
with open(f'{title}.txt', 'w') as file: # title + '.txt'
    file.write(transcript)
728x90

댓글