본문 바로가기

프로그래밍&IT/파이썬

[파이썬] 웹 스크래핑.3 - BeautifulSoup4 - 1. 설치 및 기본적인 찾기

User Agent

  • HTTP 요청을 보내는 디바이스와 브라우저 등 사용자 s/w의 식별 정보를 담고 있는 request header의 한 종류.
  • 보통 http 요청 에러 발생시 요청을 보낸 사용자 환경을 알아보기 위해 사용

기본 형태 : User-Agent: <product> / <product-version> <comment>

ex) 크롬의 경우

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36

활용 : User Agent 정보를 기반으로 특정 브라우저에서만 다르게 동작하도록 하거나 할 때 등


BeautifulSoup4 진행

   BeautifulSoup4 설치 및 기본 활용  

터미널에서 "pip install beautifulsoup4" 를 입력해서 파일들을 받는다.

추가로 lxml도 설치. (pip install lxml)

lxml ? python에서 주로 이용되는, xml, html 등 해석하는 parser

 

BeautifulSoup를 이용해서, 네이버 웹툰 페이지에서 title 가져오기

import requests
from bs4 import BeautifulSoup

url = "https://comic.naver.com/webtoon/weekday"
res = requests.get(url)
res.raise_for_status()

soup = BeautifulSoup(res.text, "lxml")  # 가져온 html파일을 lxml을 이용해서 처리
print(soup.title)
print(soup.title.get_text() ) # html 태그빼고, text만 가져올 때

BeautifulSoup 사용하기 위해 import 하기 : from bs4 import BeautifulSoup

print(soup.a) # 첫번째 발견하는 <a> 태그 가져오기
print(soup.a.attrs) # 속성 가져오기
print(soup.a["href"]) # 특정 속성정보를 확인할 때

특정 태그 찾기

soup.find("a", attrs={"class": "Nbtn_upload"})
soup.find("li", attrs={"class":"rank01"})

찾은 태그 기준으로 다음 줄 확인하기 (개행 문자 등으로 안 나올 수도 있다)

rank1 = soup.find("li", attrs={"class": "rank01"})
print("s1", rank1.next_sibling)
print("s2", rank1.next_sibling.next_sibling)

결과 : 처음 sibling할 땐 안 나오고, 다시 한번 sibling 하니까 값을 가져옴.

찾는 위치 이동

얻은 값 출력 : rank1.get_text()
이전 찾기 : rank1.previous_sibling
찾은 항목의 부모 찾기 : rank1.parent
다음 조건에 맞는 다음/이전 항목 찾기 : rank1.find_next_sibling("li") / find_previous_sibling("li")
여러개를 가져올 땐, 's'있는 함수 사용 : 
	rank1.find_previous_siblings("li")
    rank1.find_next_siblings("li")

# text로 찾기
toon1 = soup.find("a", text="찾으려는 text")