Python_web crawling_1

ianman99 ㅣ 2024. 1. 19. 11:06

# 정적 페이지

 

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