멋쟁이 사자처럼 AI 스쿨 TIL-7

김영민·2022년 9월 28일
0

진행상태를 보여주는 로직 -> from tqdm import trange
셀레니움 -> 원래 목적: 브라우저를 테스트하기 위해
-> 로그인할 때 수집할 때 사용

requests

get방식 -> Query String
post방식 -> Form Data
HTTP 상태 코드 – 200 ok 이면 성공
요청 시 봇이 아니라 브라우저라고 알려줌
-> response = requests.get(url, headers={"user-agent":"Mozilla/5.0"})

html 파일 읽어오기
-> pd.read_html(url, encoding="cp949")

결측 데이터 제거하기(axis 0:행, 1:열)
-> table[0].dropna()

데이터 프레임 합치기
-> pd.concat([df1, df2, df3])

중복데이터 제거
-> df.drop_duplicates()

과학적 기수법
-> 1.210000e+02 => 121

날짜 column의 첫 row값 확인
-> date = df.iloc[0]["날짜"]

파일로 저장하기
-> df.to_csv(file_name, index=False)

파일 읽어오기
-> pd.read_csv(file_name)

BeautifulSoup

soup.title
#The Dormouse's story

soup.title.name
#u'title'

soup.title.string
#u'The Dormouse's story'

soup.title.parent.name
#u'head'

soup.p
#

The Dormouse's story

soup.p['class']
#u'title'

soup.a
#Elsie

soup.find_all('a')
#[Elsie,
#Lacie,
#Tillie]

soup.find(id="link3")
#Tillie

html.find_all("a")[:3]
-> a태그 다 불러옴

soup.select(“a”)
-> 중요 a 태그 다 불러옴

find_all 과 select의 차이점
->
#find
soup.find('div').find('p')
#select --> 원하는 정보의 경로를 입력하여 데이터를 쉽게 추출할 수 있다.
soup.select_one('div > p')

종목 번호를 이용해 page에 따라 데이터를 읽어오는 함수
""" 는 이 두개 사이의 행들은 주석 처리되며, 함수의 docstring 으로 사용됩니다.

def get_day_list(item_code, page_no):
    """
    일자별 시세를 페이지별로 수집
    1) url을 만든다.
    2) requests 를 통해 html 문서를 받아온다.
    3) read_html을 통해 table 태그를 읽어온다.
    4) 결측행을 제거
    5) 데이터프레임 반환
    """ 
    url = f"https://finance.naver.com/item/sise_day.naver?code={item_code}&page={page_no}"
    response = requests.get(url, headers={"user-agent":"Mozilla/5.0"})
    table = pd.read_html(response.text)[0]
    return table.dropna()

일별 시세 수집

def get_item_list(item_code, item_name):
    """
    일별 시세를 수집하는 함수
    """
    item_list = []
    prev_day = ""
    page_no = 1

    while True:
        df_item = get_day_list(item_code, page_no)
        last_day = df_item.iloc[-1]["날짜"]
        print(page_no, last_day,end="|")

        if last_day == prev_day:
            break
        item_list.append(df_item)
        prev_day = last_day
        page_no = page_no + 1
        time.sleep(0.01)

    df_day = pd.concat(item_list)
    df_day["종목코드"] = item_code
    df_day["종목명"] = item_name
    cols = ['종목코드', '종목명', '날짜', '종가', '전일비', '시가', '고가', '저가', '거래량']
    df_day = df_day[cols]

    date = df_day.iloc[0]["날짜"]
    file_name = f"{item_name}_{item_code}_{date}.csv"
    df_day.to_csv(file_name,index = False)

    return file_name

expand=True -> 데이터프레임으로 반환하는 기능
itemcode 숫자 앞의 0 이 지워진다면 dtype={"itemcode": np.object} 로 타입을 지정

profile
배운걸 다 흡수하는 제로민

0개의 댓글