본문 바로가기
App Programming/Web Crawler

[Web Crawler] BeautifulSoup으로 다양한 데이터 추출하기

by goatlab 2022. 2. 14.
728x90
반응형
SMALL

BeautifulSoup

 

https://medium.com/swlh/web-scraping-using-python-and-beautifulsoup-1ddc98e1cbe3

 

HTML 문서를 탐색해서 원하는 부분만 쉽게 뽑아낼 수 있는 python 라이브러리인 BeautifulSoup이 존재한다.

 

# BeautifulSoup 설치
pip install beautifulsoup4
import requests
from bs4 import BeautifulSoup

url = 'https://kin.naver.com/search/list.nhn?query=%ED%8C%8C%EC%9D%B4%EC%8D%AC'

response = requests.get(url)

if response.status_code == 200:
    html = response.text
    soup = BeautifulSoup(html, 'html.parser')
    print(soup)

else : 
    print(response.status_code)

 

네이버 지식인에 python을 검색한 url이다. 응답 코드가 200 일때, html 을 받아와 soup 객체로 변환한다.

 

네이버 지식인 크롤링

 

import requests
from bs4 import BeautifulSoup

url = 'https://kin.naver.com/search/list.nhn?query=%ED%8C%8C%EC%9D%B4%EC%8D%AC'

response = requests.get(url)

if response.status_code == 200:
    html = response.text
    soup = BeautifulSoup(html, 'html.parser')
    title = soup.select_one('#s_content > div.section > ul > li:nth-child(1) > dl > dt > a')
    print(title)
else : 
    print(response.status_code)
    
# select_one은 하나의 html 요소를 찾는 함수인데, css 선택자를 사용해서 찾을 수 있다. 복사한 css 선택자를 select_one 함수의 인자로 넣는다.    
--> 결과물
<a class="_nclicks:kin.txt _searchListTitleAnchor" href="https://kin.naver.com/qna/detail.nhn?d1id=8&amp;dirId=80101&amp;docId=362502659&amp;qb=7YyM7J207I2s&amp;enc=utf8§ion=kin&amp;rank=1&amp;search_sort=0&amp;spq=0" target="_blank"><b>파이썬</b>배우기 쉬운곳 찾아요!!</a>
# 텍스트만 뽑아오고 싶다면 get_text() 함수를 이용하면 된다.
print(title.get_text())

 

find( ) 함수 : 첫 번째 태그를 리턴

 

html_str = '''
<html>
    <body>
        <img src="path1" alt="테스트 이미지_1" />
        <img src="path2" alt="테스트 이미지_2" />
        <img src="path3" alt="테스트 이미지_3" />
    </body>
</html>
'''

bs_obj = BeautifulSoup(html_str,'html.parser')

from bs4 import BeautifulSoup

imgtag = bs_obj.find('img')
print(imgtag['alt'])

---------------------------------------------------

테스트 이미지_1

 

find_all( ) 함수 : 조건에 해당되는 모든 태그를 리스트로 리턴

 

from bs4 import BeautifulSoup

imgtag = bs_obj.findAll('img')

for tag in imgtag:
    print(tag['alt'])
    
---------------------------------------------------------

테스트 이미지_1
테스트 이미지_2
테스트 이미지_3

 

select( ) 함수

 

find() 함수와 find_all() 함수를 이용하여 원하는 태그를 찾는 방법도 있지만 select() 함수를 사용하여 원하는 데이터를 추출할 수 있다. select() 함수를 이용하여 데이터 추출하는 방법의 장점은 다양한 옵션들을 사용할 수 있다.

 

# 네이버 부동산 매매 아파트 이름과 가격만 찾아보기
import re
import requests
from bs4 import BeautifulSoup

res = requests.get('http://land.naver.com/article/divisionInfo.nhn?rletTypeCd=A01&tradeTypeCd=A1&hscpTypeCd=A01%3AA03%3AA04&cortarNo=1168000000&articleOrderCode=&cpId=&minPrc=&maxPrc=&minWrrnt=&maxWrrnt=&minLease=&maxLease=&minSpc=&maxSpc=&subDist=&mviDate=&hsehCnt=&rltrId=&mnex=&siteOrderCode=&cmplYn=')

soup = BeautifulSoup(res.content, 'html.parser')

# a 태그이면서 href 속성 값이 특정한 값을 갖는 경우 탐색
link_title = soup.select("#depth4Tab0Content > div > table > tbody > tr > td.align_l.name > div > a.sale_title")
link_price = soup.select("#depth4Tab0Content > div > table > tbody > tr > td.num.align_r > div > strong")

for num in range(len(link_price)):
    print(link_title[num].get_text(), link_price[num].get_text())

 

https://wikidocs.net/85739

 

2.6 사이트 정보 추출하기 - beautifulsoup 사용법 (1)

# BeautifulSoup가 필요한 이유 request.text를 이용해 가져온 데이터는 **텍스트형태의 html **입니다. 텍스트형태의 데이터에서 원하는 html ...

wikidocs.net

 

728x90
반응형
LIST