728x90
반응형
SMALL
BeautifulSoup
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&dirId=80101&docId=362502659&qb=7YyM7J207I2s&enc=utf8§ion=kin&rank=1&search_sort=0&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())
728x90
반응형
LIST
'App Programming > Web Crawler' 카테고리의 다른 글
[Web Crawler] 셀레니움 (Selenium) (2) (0) | 2022.02.15 |
---|---|
[Web Crawler] 셀레니움 (Selenium) (1) (0) | 2022.02.15 |
[Web Crawler] HTML 기본태그 (6) (0) | 2022.02.14 |
[Web Crawler] HTML 기본태그 (5) (0) | 2022.02.14 |
[Web Crawler] HTML 기본태그 (4) (0) | 2022.02.10 |