Web Crawling(웹 크롤링)_동적 페이지_네이버 주식 (python)

juyeon·2022년 8월 3일
0

크롤링

목록 보기
3/13
post-thumbnail

네이버 주식

Get 방식, 개발자 도구 이용

requests package

import requests, json
import pandas as pd

절차

: 브라우저의 URL을 입력 > 데이터를 다운받음 > 출력

1. 크롬 개발자 도구로 URL 따오기


1. F12 단축키 or 개발자 도구로 진입(ctrl+shift+I)
2. 모바일 화면으로 바꾸고(보기 편하려고. 굳이 안해도 됨)
3. clean
4. 더보기를 누르면서, 새로 생성되는 header의 Request URL을 복사하기

# 삼성전자 주식 투자자별 매매동향
url = "https://m.stock.naver.com/api/stock/005930/trend?pageSize=10&bizdate=20220728"

2. JSON 형식의 str 데이터로 가져오기

: 이때 get을 하지 않으면 최신 데이터를 가져올 수 없음

response = requests.get(url) # <Response [200]> 뜨면 정상적인거임
data = response.json() # 현재 list 안에 dict로 되어있음

만약, 오류가 뜬다면?

  1. headers 추가하기
  • headers=headers 추가하기
  • user-agent: 원래 브라우저인데, 우리는 파이썬을 사용하므로 서버가 정상적인 사용자가 아니라고 판단한 것.
  • 보통 user-agent, referer, cookie 세개 추가하면 해결되긴 함

3. DataFrame으로 변환하기

pd.DataFrame(data)

이를 함수로 구현해보기

def samsung_stock_price(pagesize, bizdate): 
    """This fucntion is crawing stock price from naver webpage
    Params
    ------
    pagesize :  int : one page size
    bizdate : int : return before 10 days
    
    Return
    ------
    type : DataFrame : display, date, price, trading volume columns
    """
    # f-string을 써야함! 안그러면 오류남
    url = f"https://m.stock.naver.com/api/stock/005930/trend?pageSize={pagesize}&bizdate={bizdate}"
    response = requests.get(url)
    data = response.json()
    return pd.DataFrame(data)[['bizdate', 'closePrice', 'accumulatedTradingVolume']]
    
samsung = samsung_stock_price(10, 20220728)

  • help(함수명): 함수안에 dostring을 보여줌
    • dostring: 함수를 사용하는 방법을 문자열로 작성
  • naver도 크롤링 해봄

상관관계 보기

# 원본 보존을 위해 복사
df =  samsung.copy()

# samsung 데이터프레임에 naver의 price를 추가
df["Naver"] = naver['closePrice']
df = df.rename(columns = {'closePrice': 'Samsung'})

# ','를 없애고, float형으로 바꿔줌
df['Samsung'] = df['Samsung'].apply(lambda data: float(data.replace(',', '')))
df['Naver'] = df['Naver'].apply(lambda data: float(data.replace(',', '')))

# 상관분석
df[['Samsung', 'Naver']].corr()

# 출력
	    Samsung	 Naver
Samsung	1.00000	0.77088
Naver	0.77088	1.00000
  • df['column'].apply(): 모든 데이터를 함수에 대입한 결과를 출력

꿀팁

한글 excel 파일을 영문 excel 파일로 변경

  • %ls
    covid = pd.read_excel("covid.xlsx")
    covid.tail(2)
    covid_en = covid["title"].apply(translate)

covid["title_en"] = covid_en

utf-8-sig

  • h: a를 c: 0001로 변환하는게 encoding, c: 0001을 h: a로 변환하는걸 decoding
  • 인코딩과 디코딩은 여러 방식이 있음.
  • utf-8-sig 가 이 변환 방식을 맞춰주는 것. 서로 호환되어야 제대로 뜨니까. 이걸 붙여줘야 엑셀에서 한글이 깨지지 않음.
  • asci euc k utf-8.. utf-8이 모든 나라 언어를 지원함. 여튼 이게 가장 많이 메모리 차지하는데, 요즘은 하드웨어가 저렴하니까 요즘은 다 이거 쓰는게 좋음.
covid.to_excel("covid_en.xlsx", index = False, encoding = "utf-8-sig")
profile
내 인생의 주연

0개의 댓글