네이버 주식 (테이블->csv 모듈)
- import csv --> csv.writer(f) , writer.writerow(title)
- writer.writerow(리스트형데이터)
- 파일쓰기 : filename = "시가총액1-200.csv"
f = open(filename, "w", encoding="utf-8-sig", newline="")
writer = csv.writer(f) - 엑셀에서 한글 깨질 때, utf-8-sig 로
- newline="" 이 없으면, row 마다 빈 줄이 추가됨.
- 탭 기준으로 split :: title .split('\t")
- 빈 줄 skip( td colspan="10" 같은..의미없는 줄은 출력X ) --> if len(columns) <= 1: continue
- .strip() 으로 공백처리. trim
- 표데이터 추출 data_rows 와 column
1) soup.find 로 table->tbody->find_all("tr") ---->data_rows 배열객체
2) column = row.find_all("td") - 한 줄 for 문
data = [column.get_text().strip() for column in columns]
import csv
import requests
from bs4 import BeautifulSoup
# url = "https://finance.naver.com/sise/sise_market_sum.naver?&page=1"
url = "https://finance.naver.com/sise/sise_market_sum.naver?&page=" # 바로 +1,+2
filename = "시가총액 1-200.csv"
f = open(filename, "w", encoding="utf-8-sig", newline="") # newline없으면, 빈 줄 추가됨
writer = csv.writer(f)
title = "N 종목명 현재가 전일비 등락률 액면가 시가총액 상장주식수 외국인비율 거래량 PER ROE".split("\t")
writer.writerow(title) #리스트형 데이터
for page in range(1,5):
res = requests.get(url + str(page))
res.raise_for_status()
soup = BeautifulSoup(res.text, "lxml")
# print(soup.text)
data_rows = soup.find("table",{"class":"type_2"}).find("tbody").find_all("tr")
for row in data_rows:
columns = row.find_all("td")
# <tr></tr> 중에 <td>가 한 개만 있는 <tr>은 skip. ex) td colspan="10"
if len(columns) <= 1: # columns (<tr>)안에 td가 1개 이하면, 컬럼 보여주지 말고 다음 줄로
continue
#한 줄 for 문:리스트로 [i for i in data]
data = [col.get_text().strip() for col in columns]
print(data)
writer.writerow(data) # 리스트형 data
# if len(columns):
# continue
# data = [col.get_text().strip() for col in columns]
# print(data)
'활용3. 웹스크래핑(0825-0829) > requests' 카테고리의 다른 글
스크래핑 2-2 다음 영화 이미지 저장( requests ) (0) | 2022.08.28 |
---|---|
스크래핑 2-1 쿠팡 (User-Agent 헤더) (0) | 2022.08.28 |
스크래핑 1 : 웹툰 가우스 전자 평균 (0) | 2022.08.27 |
스크래핑 0. 기초 requests, headers , re, BeautifulSoup (0) | 2022.08.25 |
댓글