BeautifulSoup4 기본

몽자비루 ㅣ 2023. 4. 18. 12:42

import requests
from bs4 import BeautifulSoup

url = "<https://www.naver.com/>"
res = requests.get(url)
res.raise_for_status()

# res.text 를 lxml파서를 통해 beautifulsoup 객체로 만듬.
soup = BeautifulSoup(res.text, "lxml")

# html 에서 첫번째로 발견되는 title 값을 가져옴.
print(soup.title)
# title값의 text값만 가져옴.
print(soup.title.get_text())

print(soup.link)
# link태그가 가지고있는 속성을 가져옴.
print(soup.link.attrs)

# link 태그 안의 특정 속성을 출력
print(soup.link['rel'])
print(soup.link.attrs['rel'])
  • BeautifulSoup : 스크래핑을 하기위해 사용하는 패키지
  • lxml : xml을 해석하는 파서
  • soup = BeautifulSoup(res.text, "lxml") : res.text 를 lxml파서를 통해 beautifulsoup 객체로 만듬.
  • soup.title : soup 에서 첫번째로 발견하는 title 값을 가져옴
    ㄴ soup.title.get_text() : title값의 text값만 가져옴.
    ㄴ soup.title.attrs : title값의 속성을 모두 가져옴.
    ㄴ soup.title.attrs[’abc’] : title 속성값중에 abc 속성을 가져옴.
# soup 객체중 a태그, class속성이 일치하는 첫번째 엘리먼트 가져옴.
test = soup.find("a", attrs = {"class" : "_NM_THEME_CATE tab id_bboom"})
# 속성값만 할당함
test = soup.find(attrs = {"class" : "_NM_THEME_CATE tab id_bboom"})
print(test)

list1 = soup.find("li", attrs = {"class" : "nav_item"})
print(list1)
# list1에 들어있는 값 중 i 값만 출력
print(list1.i)
  • soup.find(”a” , attrs = {”class” : “abc”}) : a태그중 class가 “abc”인 첫번째 element 가져옴.
  • soup.find(attrs = {”class” : “abc”}) : class가 “abc”인 첫번째 element 가져옴.
  • soup.find(attrs = {”class” : “abc”}).i : 위 elemet에서 i의 값만 가져옴.
## 다음값으로 이동

print(list1.a.get_text())

# list1엘리먼트로부터 다음 엘리먼트(형재 관계) 로 넘어감.
# 태그 사이의 개행정보가 있어서 next_sibling을 2회해야할 수도 있음.
print(list1.next_sibling.next_sibling)

list2 = list1.next_sibling.next_sibling
list3 = list2.next_sibling.next_sibling

print(list3.get_text())

# 다음 sibling으로 가는데 "li"와 일치하는 태그를 찾음.
list2 = list1.find_next_sibling("li")
print(list2.get_text())

# list2 기준으로 다음 형제들을 모두 가져옴.

print(list2.find_next_siblings("li"))

## 이전값으로 이동 
list2 = list3.previous_sibling.previous_sibling
print(list2.get_text())

## 부모 태그로 이동.
# list1의 부모 태그로 이동함.
print(list1.parent)
print("-"*40)

test = soup.find("a", text = "로그인")
print(test)
  • lst1.next_sibling : lst1의 다음 element(형제 관계) 로 넘어감.
    ㄴ 태그 사이에 개행정보가 있어서 next_sibling을 2회 해야 할 수도 있음.
  • lst1.find_next_sibling("li") : 다음 element(형제 관계) 중 “li” 태그인 값을 가져옴.
  • lst1.find_next_siblings("li") : lst1 기준으로 다음 “li”태그인 element들을 모두 가져옴.
  • lst1.previous_sibling: lst1의 이전 element(형제 관계) 로 넘어감.
  • lst1.parent : lst1의 부모 element로 넘어감
    ㄴ 참고로 자식 element로 넘어갈 때에는 위와 같이 변수.속성값 을 사용한다.

'python > python_selenium' 카테고리의 다른 글

BeautifulSoup4 활용2  (0) 2023.04.22
BeautifulSoup4 활용1  (0) 2023.04.19
user agent  (0) 2023.04.17
정규식  (0) 2023.04.17
웹스크래핑에 필요한 이론  (0) 2023.04.16