Beautiful Soup

yoong·2023년 5월 13일

6.EDA

목록 보기
5/8

BeautifulSoup for web data

1. 정의:

태그로 되어있는 문서를 해석하는 파이썬모듈

2. install

#1
conda install -c anaconda beautifulsoap4

#2
pip install beautifulsoup4

3. import

from bs4 import BeautifulSoup

4. page 불러오기

page = open("../data/03. test_first.html", "r").read()
soup = BeautifulSoup(page, "html.parser")
print(soup.prettify())

5. 특정값 보기

#head 
soup.head

#body
soup.boody

#p(가장 처음 p만 출력)
soup.p 

6. find

soup.find("p",{"class":"inner-text first-item"}).text.strip()

1) 다중조건

soup.find("p",{"class":"inner-text fisrt-item","id":"first"})

2) find_all()

: 여러개 찾고 싶을때

soup.find_all("p")
  • p 태그 리스트에서 텍스트 속성만 출력
for each_tag in soup.find_all('p'):
    print("-"* 50)
    print(each_tag.text)

예제 1. 금융데이터

  1. import
#import
from urllib.request import urlopen
from bs4 import BeautifulSoup
  1. url
    : hrml.parser가 설치가 안되서 lxml로 진행 (lxml install)
url = "https://finance.naver.com/marketindex/"
page = urlopen(url)
soup = BeautifulSoup(page,"lxml") 
print(soup.prettify())
#url페이지 담김 
#request로 불러올 수 있음. 
url = "https://finance.naver.com/marketindex/"
response = urlopen(url)
response.status
soup = BeautifulSoup(page,"lxml") 
print(soup.prettify())

3.find

#1
soup.find_all("span","value"),len(soup.find_all("span","value"))

#2
soup.find_all("span", class_="value"),len(soup.find_all("span","value"))

#3
soup.find_all("span",{"class":"value"}),len(soup.find_all("span",{"class":"value"}))

>>>  ... <span class="value">86197.25</span> , 12 
#1
soup.find_all("span",{"class":"value"})[0].text

#2
soup.find_all("span",{"class":"value"})[0].string

#3 
soup.find_all("span",{"class":"value"})[0].get_text()

>>>  ('1,336.00')
# a 태그에서 href(주소값) 속성값 추출

links = soup.find_all("a")
links[0].get("href"),links[1]["href"]
links

for each in links:
    href = each.get("href")
    text = each.get_text()
    print(text + " => " + href)

[참고] urlencoding vs urldecoding

  • url에 문자를 표기하기 위한 문자 encoding 방법 서버에 url data를 전송할 때 자동으로 urlencoding을 하고 data를 받는 서버에서는 urldecoding을 자동으로 수행함.

예제 2. 위키백과 문서정보 가져오기

#1

import urllib
from urllib.request import urlopen,Request

html = "https://ko.wikipedia.org/wiki/{search_words}"
req = Request(html.format(search_words=urllib.parse.quote("여명의_눈동자"))) #글자를 url로 인코딩
response = urlopen(req)
response.status
soup = BeautifulSoup(response,"html.parser")
print(soup.prettify())

#2 : ul값 찾기

n = 0

for each in soup.find_all("ul"):
    print("=>" + str(n) + "=========================")
    print(each.get_text())
    n += 1

#3: 가져오고 싶은 값만 가져오기

#strip: 띄어쓰기 붙여주기 
#replace: 보기싫은 문자부분 바꿔주기 
soup.find_all("ul")[32].text.strip().replace("\xa0","").replace("\n","") 

[참고]
정규표현식 (Regular Expressions)
: https://nachwon.github.io/regular-expressions/

Reference

-정규표현식
: https://nachwon.github.io/regular-expressions/

  • 이글은 제로베이스 데이터 취업 스쿨의 강의자료 일부를 발췌하여 작성되었음.
profile
데이터와 이미지로 세상을 공부하는 중입니다 :)

0개의 댓글