# 정적 페이지
import requests # 파이썬으로 웹사이트 접속 도와주는 라이브러리
from bs4 import BeautifulSoup #파이썬으로 HTML 웹문서 분석 도와주는 라이브러리
var = requests.get('주소')
print(var.content) # .content : 연결한 페이지 내용 프린트
print(var.status_code) # 웹페이지에 접속이 제대로 되나 확인
soup = BeautifulSoup(var.content, 'html.parser') # 이쁘게 만들기
soup.select('.상위 클래스명') # 클래스명이 '상위 클래스명'인걸 찾아주세요
<CSS selector>
class는 .
id는 # ,
아무것도 없는 것은 태그명
AND 문은 붙여쓰기
내부요소를 찾으려면 띄워쓰기
soup.select('strong#_nowVal') # 태그가 strong이면서 id가 _nowVal인것을 찾아
# class, id가 없으면 .select를 활용해 상위 클래스를 먼저 찾고 그 안에 있는 태그를 찾으면됨
ex. print(soup.select('.gray .f_down em')[0].text)
# soup = BeautifulSoup(res.content, 'html.parser', from_encoding='utf-8') # 결과창 한글 인코딩 출력
# 함수를 이용한 크롤링
list_all = ['005930', '066575', '005380', '035720', '034220', '003490] # 각 종목의 티커
list_mat = []
def fun(ticker) :
var = requests.get(f'https://finance.naver.com/item/sise.nhn?code={ticker}')
soup = BeautifulSoup(var.content, 'html.parser') # 예쁘게 만들기
# print(soup.select('#_nowVal')[0].text) # 현재가
# print(soup.select('#_quant')[0].text) # 거래량
list = [soup.select('#_nowVal')[0].text, soup.select('#_quant')[0].text] # 한 관측치를 한 행으로
list_mat.append(list) # 한 행씩 쌓기
# 삼전 티커코드 ''안에 넣는 이유는 URL이 문자이기 때문
for x in list_all: # list_all 의 데이터를 한 번씩 넣으며 반복
fun(x)
# print(list_mat)
# list_mat 를 txt 파일로 저장
file = open('test.txt', 'w')
for row in list_mat:
file.write(' '.join(row) + '\n')
file.close
# list_mat 를 csv 파일로 저장
file = open('test.csv', 'w')
for row in list_mat:
row_str = ','.join(f'"{str(value)}"' for value in row)
file.write(row_str + '\n')
file.close
# 동적 페이지 크롤링 (Network)
import requests
from bs4 import BeautifulSoup
var1 = requests.get('링크1')
soup1 = BeautifulSoup(var1.content, 'html.parser')
var2 = requests.get('링크2')
soup2 = BeautifulSoup(var2.text.replace('\\', ''), 'html.parser')
# 스크롤을 내리거나 더보기 버튼을 눌러야 데이터가 더 보이는 경우
# 개발자 도구 - Network - search 에서 내가 원하는 데이터 검색
# 그 데이터의 Header 에서 GET 할 수 있는 URL을 복사 request.get('')에 붙여넣기
# soup = BeautifulSoup(var.text.replace('\\', ''), 'html.parser')
# 클래스명에 \가 들어가 있는 경우 제거해줘야함, \를 문자 그 자체로 적고 싶으면 \\ 처럼 두개를 적어야함
# replace 하려면 문자 데이터 여야함 근데 .content는 문자열이 아님
# 그래서 내용은 같은데 문자형식만 다르게 .text로 불러옴
for i in range(0, 32):
print(soup1.select('.title_link')[i].text)
for i in range(0, 32):
print(soup2.select('.title_link')[i].text)
# 해당 요소의 문자 내용이 아닌 특정 내용 ex. href 같은 것을 수집하고 싶으면 .text 대신 ['href']
ex.
var3 = soup1.select('요소')[0]['href']
print(var3)
'Python' 카테고리의 다른 글
| JSON 데이터 다루기_2, map 함수 (1) | 2024.02.01 |
|---|---|
| 네이버 블로그 자동 글 발행 (0) | 2024.01.21 |
| JSON 데이터 다루기_1 (1) | 2024.01.19 |
| Python_time 문법 (2) | 2024.01.19 |
| Python_파일 작성 및 저장 (0) | 2024.01.19 |