보통 <table> 안에 <thead>, <tbody>가 들어있고
<thead> 안에 <tr>, <th>가 위의 그림과 같이,
<tbody> 안에 <tr>, <td>가 위의 그림과 같이 들어있는 형태이다.
tr : 하나의 행
td : 하나의 열
th : 열이름
우리는 tbody 태그가 있다면 <tbody>를 통째로 꺼내서 필요한 태그 하나씩 꺼내쓰면 된다.
1. 라이브러리 설치
import requests
from bs4 import BeautifulSoup
url = 'http://finance.naver.com'
res = requests.get(url).content
soup = BeautifulSoup(res, 'html.parser')
2. tbody 통으로 꺼내기
top_items = soup.find('tbody', {'id':'_topItems1'})
3. 원하는 태그 하나씩 꺼내기
top_items = soup.find('tbody', {'id':'_topItems1'})
item_rows = top_items.find_all('tr')
for item in item_rows:
item_name = item.find('th').get_text() # 종목명
item_price = item.find_all('td')[0].get_text() # 현재값
item_delta_price = item.find_all('td')[1].get_text() # 가격변화값
item_delta_percent = item.find_all('td')[2].get_text() # 가격변화율
print(item_name, item_price, item_delta_price, item_delta_percent)
4. 최종 정리하면,
top_items = soup.find('tbody', {'id':'_topItems1'})
item_rows = top_items.find_all('tr')
plus_items = [] # 백분율 변화량이 + 부호인 종목들을 모을 list
highest_item = {'top_name':'', 'percent_change':0} # 백분율 변화량이 + 부호인 종목 중 가장 큰 비율로 증가한 종목을 담을 dict
for item in item_rows:
item_name = item.find('th').get_text()
item_price = item.find_all('td')[0].get_text()
item_delta_price = item.find_all('td')[1].get_text()
item_delta_percent = item.find_all('td')[2].get_text().strip()
print('{} : 현재가 {}, 어제보다 {} {}, 백분율 변환 시{}'.format(
item_name, item_price, item_delta_price[3:], item_delta_price[:2], item_delta_percent))
# 백분율 변화량 기호가 '+' 이면
if item_delta_percent[0] == '+':
plus_items.append(item_name)
# sorted 함수를 사용하는 것이 더 빠를 수도
# 백분율 변화량 기호가 '+' 이고 변화량 수치(+4.84% -> 4.84)가 기존 가장 큰 증가 비율보다 클 경우,
# [1:-1] (기호 떼고 % 떼고 수치값만 출력)
if float(item_delta_percent[1:-1]) > highest_item['percent_change']: # 처음은 0
highest_item['top_name'] = item_name
highest_item['percent_change'] = float(item_delta_percent[1:-1])
plus_items = ', '.join(plus_items) # [W홀딩컴퍼니, 에이치엘비파워, 퓨전데이타] -> 'W홀딩컴퍼니, 에이치엘비파워, 퓨전데이타'
print('\n어제보다 상승한 종목은 [ {} ]입니다.'.format(plus_items))
print('어제보다 가장 많이 상승한 종목은 [ {} (+{}%) ]입니다.'.format(
highest_item['top_name'], highest_item['percent_change']))
'멋쟁이 사자처럼 AI SCHOOL 5기 > Today I Learned' 카테고리의 다른 글
[3주차 총정리] np.array 특징 총정리 (list와의 차이점, 기초함수) (0) | 2022.03.30 |
---|---|
[3주차 총정리] 웹스크래핑, Open API (부동산 매매 신고 자료) (0) | 2022.03.30 |
[3주차 총정리] Post Request 기반의 웹사이트 크롤링 (서울상권분석서비스) (0) | 2022.03.29 |
[3주차 총정리] Wadis 마감 상품 재고 체크 & 메일 발송 크롤링 (0) | 2022.03.29 |
[3주차 총정리] Selenium으로 브라우저 제어 자동화하기(2) _ 인터파크 투어 크롤링 (0) | 2022.03.29 |