- BeautifulSoup
- 설치
- 사용법
- 샘플
- 참고 문헌
BeautifulSoup
설치
# apt install python3-bs4
pip3 install bs4
pip3 install lxml
pip3 install html5lib
사용법
import requests
from bs4 import BeautifulSoup
url = "https://finance.naver.com/"
res = requests.get(url)
soup = BeautifulSoup(res.text, "html.parser") #--- HTML 파서
# soup = BeautifulSoup(res.text, "html.parser", multi_valued_attributes=None)
# soup = BeautifulSoup(res.text, "lxml") #--- HTML 파서
# soup = BeautifulSoup(res.text, "xml") #--- XML 파서
#--- 검색 : find(), find_all()
soup.find('~') #--- 태그 이름으로 태그 찾기
soup.find(id='~') #--- id로 태그 찾기
soup.find(class_='~') #--- class로 태그 찾기
soup.find('~', id='~', class_='~')
soup.find_all('a') #--- 모든 a 태그
soup.find_all(['~', '~'])
soup.find_all(re.compile('~')) #--- 정규 표현식으로 검색
soup.find_all(True) #--- 모든 태그
def has_class_but_no_id(tag):
return tag.has_attr('class') and not tag.has_attr('id')
soup.find_all(has_class_but_no_id)
#--- 검색 : select()
#--- CSS Selector 사용
#--- https://www.jopenbusiness.com/mediawiki/CSS3
soup.select('~')
#--- 태그 탐색
soup.next_sibling #--- 다음 형제 태그
soup.next_siblings #--- iterate
soup.previous_sibling #--- 이전 형제 태그
soup.previous_siblings #--- iterate
soup.~ #--- 첫번째 ~ 자식 태그
soup.contents #--- 자식 태그 배열
soup.children #--- 자식 태그 iterate
# for child in soup.children:
soup.descendants #--- 모든 자식 태그 탐색용 iterate
# len(list(soup.descendants))
soup.parent #--- 부모 태그
soup.parents #--- 모든 부모 태그 iterate
soup.next_element #--- 다음 태그
soup.next_elements
soup.previous_element #--- 이전 태그
soup.previous_elements
#--- 태그 탐색
#--- class와 같이 여러값을 가질수 있는 속성값은 배열에 담겨 반환 한다.
#--- multi_valued_attributes=None을 사용하며 배열이 아니라 값으로 반환 한다.
soup.name #--- 태그 이름
soup.['~'] #--- 속성값
soup.get('~') #--- 속성값
soup.attrs #--- 속성값을 저장한 객체
del soup.['~'] #--- 속성값 삭제
soup.string #--- 태그의 내용
unicode(soup.string) #--- Unicode 문자열로 태그의 내용을 반환
soup.string.replace_with('~') #--- 태그의 내용을 ~로 대체
soup.strings
soup.stripped_strings
샘플
# -*- coding: utf-8 -*-
# Author : gye hyun james kim [pnuskgh@gmail.com]
# Copyright (c) 2018 ~ 2019, OBCon Inc. All rights reserved.
import sys
import traceback
import requests
from bs4 import BeautifulSoup
class Crawling:
def __init__(self, List, p_str=None):
pass
def __del__(self):
pass
def run(self):
self.getXml001()
def getHtml001(self):
url = "https://finance.naver.com/"
res = requests.get(url)
soup = BeautifulSoup(res.text, "html.parser")
data = soup.select("#container > div.aside > div.group_aside > div.aside_area.aside_stock > table > tbody > tr")
for item in data:
print('-', item.find('th').text, end="\t")
print(item.find_all('td')[0].text, end="\t")
print(item.find_all('td')[1].text)
print()
data = soup.select("#container > div.aside > div.group_aside > div.aside_area.aside_popular > table > tbody > tr")
for item in data:
print('-', item.find('th').text, end="\t")
print(item.find_all('td')[0].text, end="\t")
print(item.find_all('td')[1].text)
print()
#--- WSDL 반환
# end_point = 'http://openapi.molit.go.kr/OpenAPI_ToolInstallPackage/service/rest/RTMSOBJSvc/getRTMSDataSvcLandTrade?_wadl&type=xml'
def getXml001(self):
#--- 토지 매매 신고 조회 서비스
end_point = 'http://openapi.molit.go.kr/OpenAPI_ToolInstallPackage/service/rest/RTMSOBJSvc/getRTMSDataSvcLandTrade'
ServiceKey = '인증키'
LAWD_CD = '11110' #--- LAWD_CD, 각 지역별 코드
DEAL_YMD = '201512' #--- DEAL_YMD, 월 단위 신고자료
url = end_point + '?ServiceKey=' + ServiceKey
url = url + '&LAWD_CD=' + LAWD_CD
url = url + '&DEAL_YMD=' + DEAL_YMD
url = url + '&pageNo=1'
url = url + '&numOfRows=10'
res = requests.get(url)
soup = BeautifulSoup(res.text, "xml")
resultCode = soup.find('resultCode')
resultMsg = soup.find('resultMsg')
print(resultCode.string, resultMsg.string)
data = soup.find_all('item')
for item in data:
print(item.법정동.string)
if __name__ == "__main__":
try:
app = Crawling(sys.argv)
app.run()
except KeyboardInterrupt:
print(traceback.format_exc())
참고 문헌
최종 수정일: 2024-09-30 12:26:18
이전글 :
다음글 :