안녕하세요, 케빈 러드입니다.오랫만입니다。요즘 너무 바쁜 나날을 보냈지 글은 올리지 못해ㅅ습니다만, 제 풀밍그 실력은 오른 것 같아요.(라임을 붙였다.)람지~)후 무후무, 아무튼..오늘은 지금까지 한 적 없는 크롤링을 하고 보려구요.크롤링은 머신 러닝 딥 러닝으로 필요한 데이터를 수집하는 것이지만 내가 최근 주식에 빠져서… 그렇긴…어차피 빠져나간다면 스마트하게 빠질까 해서 네이버 금융을 크롤링 하고 그 데이터로 결과를 도출하는 것입니다.!오늘은..어느 정도 웹과 파이썬을 알고 있는 분들을 기준으로 작성했습니다.준비물 프로그래밍 언어:파이썬 툴:아나콘다, 주피터, 크롬 드라이버 2.40그리고 열정과 끈기, 본장에서 주피터와 크롬 드라이버 설치 단계는 팔딱팔딱 뜁니다.그 부분은 나중에 따로 정리해서 업로드하고 싶습니다. 다른 블로그에도 아마 정리된 것이 있다고 생각한다.. 시작합니다.from bs4 import Beautiful Soupfrom selenium import webdriver import time import xlwtfrom selenium.webdriver.support.ui import Select // 티티에프롬과 레니오로 싹어요. // 이게 없는 분은 /! pip install Beautiful Soup /! pip install selenium에 설치해주세요. /xlwt는 엑셀로 자료를 변환시켜주는 것입니다.from bs4 import Beautiful Soupfrom selenium import webdriver import time import xlwtfrom selenium.webdriver.support.ui import Select // 티티에프롬과 레니오로 싹어요. // 이게 없는 분은 /! pip install Beautiful Soup /! pip install selenium에 설치해주세요. /xlwt는 엑셀로 자료를 변환시켜주는 것입니다.이런 느낌이에요.2.path = ‘E:\data_science202007\downdata\chromedriver.exe’/path는 크롬 드라이버가 있는 저장 경로입니다. 저는 위 경로에 있기 때문에 저렇지만 여러분은 아니죠?driver = webdriver.Chrome(path)//셀레늄에서 선언한 웹드라이버를 실행시킵니다.driver.get(‘https://www.naver.com ‘)//그러면 크롬이 열리고 위 주소로 열립니다.time.sleep (2)//고진컴퓨터를위한대기시간2초path = ‘E:\data_science202007\downdata\chromedriver.exe’/path는 크롬 드라이버가 있는 저장 경로입니다. 저는 위 경로에 있기 때문에 저렇지만 여러분은 아니죠?driver = webdriver.Chrome(path)//셀레늄에서 선언한 웹드라이버를 실행시킵니다.driver.get(‘https://www.naver.com ‘)//그러면 크롬이 열리고 위 주소로 열립니다.time.sleep (2)//고진컴퓨터를위한대기시간2초크롬 드라이버 경로크롬창이 열렸기 때문에 이제 네이버 증권까지 들어가야 합니다.F12또는 ctrl+Shift+i를 누르면 오른쪽의 같은 창이 표시됩니다만, 우측 윈도우에서 가장이 있는 맨 위 왼쪽에 있는 버튼을 누르고 네이버 증권 란을 선택하면 그 증권 문자의 눌렀을 때 경로와 html의 경로가 나옵니다.우리는 크롬 드라이버가 그 놈을 누르도록 해야 하니까..여러가지 방법이 있지만, 나는 xpath으로 움직이게 합니다.누른 후 윗 그림과 하늘색 부분을 마우스 오른쪽 클릭 → copy→ copy Xpath을 누르면 xpath가 복사됩니다.그럼 주피터에 와서..driver.find_module_by_xpath(”//*[@id=”)NM_Favorite”]/div[1]/ul[2]/li[3]/a”’).click()이렇게 씁니다. xpath 경로가 위에 있는 거예요.이렇게 들어와요.저는 이차전지를 했는데 다른 주제를 하실 분들은 그 주제의 xpath를 위에 넣어주세요.이 부분은 제가 원하는 내용을 적용해보고 싶습니다.저는이렇게 바꿔드리려고 합니다.그럼 위와 같은 방법으로 상기 체크박스의 위치와 div클래스 등을 살펴본 후driver.find_element_by_xpath(”’//*[@id=”contentarea”]/div[3]/form/div/div/div/a[2]”’). click()#초기 항목에서 단추를 누른다. 초기화 time.sleep(1)driver.find_element_by_id(‘option1’). click()driver.find_element_by_id(‘option2’). click()driver.find_element_by_id(‘option3’). click()driver.find_element_by_id(‘option8’). click()driver.find_element_by_id(‘option9’). click()#다행히 체크 박스 ID는 이 페이지에 하나씩밖에 없더라구요 초기화되어 있는 항목을 클릭하고 해제하고.#이곳까지 체크 해제합니다.driver.find_element_by_id(‘option4’). click()driver.find_element_by_id(‘option5’). click()driver.find_element_by_id(‘option11’). click()driver.find_element_by_id(‘option12’). click()driver.find_element_by_id(‘option17’). click()driver.find_element_by_id(‘option23′). click()# 좋아하는 항목을 누르고 검색 버튼을 누릅니다.driver.find_element_by_xpath(”’//*[@id=”contentarea”]/div[3]/form/div/div/div/a[1]/img”’). click()time.sleep(2)그러면 원하는 자료가 나오고 앞으로 각 자료의 데이터를 모아서 엑셀화해야 합니다.일행은 tbody의 tr로 묶여 있는 것을 확인할 수 있습니다.html = driver.page_sourcesoup = BeautifulSoup (html, ‘html.parser’)/자, 긁어오기만 하면 됩니다. 위의 코드는 긁기 위한 선언문입니다.prod_items = soup.select(‘table.type_5> tbody > tr’)/prod_items는 위에서 언급한 바와 같이 tbody 아래에 있는 모든 tr(주식정보~)를 의미합니다자, 주식정보를 모두 prod_items에 넣었으니 for문을 돌려 각 정보를 목록에 넣습니다.위 사진을 보시면 종목명부터 현재가 시가총액~ROE 토론실까지 나눠져 있는 걸 보실 수 있는데 얘네들은 같은 td 태그로 배열화 되어 있는 걸 확인하실 수 있습니다.그래서 저는 전일 대비 등락률은 필요 없기 때문에 각 배열별 숫자로 나누어 리스트화시킵니다.defget_data(try_item):prod_data=[]//prod_item:try:name=prod_item의 prod_data를 지정합니다. select(“(“)”)[0]. text.strip(“except:name=”try:price=prod_item.”). select(“(“)”)[2]. text.strip(“except:price=’0″try:siga=prod_item). select(“(“)”)[5]. text.strip(“except:siga=’0″try:bprofits=prod_item). select(“()”)[6]. text.strip()except:bprofits=’0’try:tprofits=prod_item을 선택합니다. select(“()”)[7]. text.strip()except:tprofits=’0’try:jprofits=prod_item을 선택합니다. select(“(“)”)[8]. text.strip(“except:jprofits=’0″try:bprofitsPercents=prod_item). select(“(“)”)[9]. text.strip(“except:bprofitsPercents=’0″try:roe=prod_item). select(“(“)”)[10]. text.strip(“except:roe=””try:why=prod_item.”). select(“(“)”)[1.text.strip(except:why=”prod_data.append([name, price, siga, bprofits, tprofits, jprofits, bprofitsPercents, roe, why])을 갚을 prod_data print(f_data)함수화 시켜줬어요.그럼.prod_data_fin = get_items(prod_items)위의 코드로 진짜 데이터를 넣고… 순서를 잘 정해야 합니다.저같은경우주제이유는원래이름다음인데목록상에서는맨뒤에why라는이름으로넣어줬어요.앞으로 pandas를 이용하여 데이터 프레임화 시키고 엑셀화시켜서 저장하겠습니다.pandas가 없으신 분은! pip install pandas로 설치해주세요.import pandas pd데이터 = pd.Data Frame(prod_data_fin) #데이터 변수 안에 최종 fin데이터를 프레임화해 넣는 data.columns = [‘이름’, ‘현재가격’, ‘시가총액’, ‘영업이익’, ‘당기순이익’, ‘주당순이익 증가율’, ‘ROE’, ‘테마사유’] #칼럼입니다 엑셀 최상단 순서대로 들어갈 것 같습니다.data.to _excel(“경로”) #저같은경우는 data.to _excel(‘./Bmemory/DataFin.xlsx’)이렇게 되면 엑셀 파일이 생겨서 열어보면이렇게 데이터가 나열되어 있습니다.오늘은 크롤링해서 엑셀화시키는 방법에 대해서 공부했는데요, 2탄에서는 엑셀파일을 통해서 분석, 시각화할 수 있도록 string으로 되어 있는 숫자들을 float화시키고 최대값 최소값 평균값 등을 이용해서 시각화 시켜보도록 하겠습니다.그럼 오늘은 여기까지!