삶의 공유

[파이썬] 웹 크롤링 (미국소비자물가지수, investing.com) 본문

Data Scientist/Python

[파이썬] 웹 크롤링 (미국소비자물가지수, investing.com)

dkrehd 2021. 8. 12. 10:21
728x90
반응형

 

크롬으로 실행 후 investing.com에서 미국 소비자 물가지수 들어감

(url : https://kr.investing.com/economic-calendar/cpi-733)

 

1) 빨간색 화살표 영역 선택 하면 좌측 표 전체 선택이 됨

 

 

2) 빨간 화살표 영역 선택 후 마우스 우클릭 -> copy -> copy xPath 클릭

 

3) selenium module의 webdriver를 이용하여 find_element_by_xpath 이용

import pandas as pd
from selenium import webdriver
# chrome 실행
driver = webdriver.Chrome(r'/Users/swk/Downloads/chromedriver')

# 해당 링크로 접속
driver.get('https://kr.investing.com/economic-calendar/cpi-733')

# 현재 창에서 스크린샷 찍고 저장
text = driver.find_element_by_xpath("//*[@id='eventHistoryTable733']") 
print(text.text)

driver.quit()

결과 

 

 

잘 갖고 오는 것을 볼 수 있다.

 * 참고로 xpath 경로 copy해서 갖고 올때 ', '' 구분해서 수정 하길 바람, 보통 "" "" 으로 되어있어서 문자열로 인식 못하게 되는데 ', '' 로 구분해주면 문자열로 구분 가능 함

 ex) "민호가 말했다 " 안녕하세요 " 라고 " -> 문자열로 인식 안됨

      수정 : "민호가 말했다 '안녕하세요' 라고" 이렇게 하면 전체적으로 문자열로 인식됨

 

 

DataFrame화 하기

* 문자열로 되어 있기 때문에, pandas의 DataFrame 함수 호출 시 에러가 난다, 그래서 메뉴얼로 해본다..

 

먼저 text.text로 하면 문자열로 쭉 되어 있는 것을 볼수 있다.

공통적으로 '\n'으로 줄 구분을 할 수 있는 것을 볼수 있다. 

split()함수를 통해 나눠준다

 

 

나눴으면, 컬럼으로 사용할 맨 첫번째 행을 분류한다.

 

이제 pandas 함수를 이용하여 빈 dataframe을 만들고 column명을 넣어 준다.

 

그 이후에 각 앞서 분류한 리스트의 각 항목들을 하나씩 접근해서 dataframe함수의 행으로 붙여 넣어 준다.

import pandas as pd
framelist = []
for idx, text in enumerate(split_text):
    if idx == 0:
        pass
    else:
        temp_list = []
        split = text.split()
        result = ''
        for idx, t in enumerate(split):
            if idx <= 3:
                result += t
            elif idx > 3:
                if not(result in temp_list):
                    temp_list.append(result)
                temp_list.append(t)
        add_data = {'발표일':temp_list[0],'시간':temp_list[1], '발표':temp_list[2], '예측':temp_list[3], '이전':temp_list[4]}
        df = df.append(add_data, ignore_index=True)
df

이렇게 하고, 깊은 복사를 통해 크롤링해 온 데이터가 없어져도 상관없도록 코딩해준다.

 

 

잘 된 것을 볼수 있다.

반응형