본문 바로가기

데이터 청년 캠퍼스(경남대학교)/수업

2021-07-12

Crawler

 

데이터의 종류

  • 정형데이터 : 표 형태의 데이터
  • 비정형데이터 : 표 형태가 아닌 데이터(ex. 사진, 동영상)

데이터를 어떻게 모을 것인가?

  • 가설을 설정한 후 데이터를 수집한다
  • 회사 내에 있는 자료는 대부분 정형 데이터인데 정형 데이터로만 해결할 수 있는 문제는 드물다

웹 크롤링은 인터넷에 있는 자료를 가져오는 것임

 

Selenium : 웹 페이지의 모든 데이터를 가져옴

Beautiful Soup : 셀레늄 전체 데이터에서 원하는 데이터만 추출

 


설치

%pip install chromedriver_autoinstaller
import chromedriver_autoinstaller
chromedriver_autoinstaller.install( )
from selenium import webdriver
driver= webdriver.Chrome()

 

네이버에서 검색하기

# naver에서 검색하기

#Step 1. 필요한 모듈을 로딩합니다
from selenium import webdriver
import time          

#Step 2. 사용자에게 검색 관련 정보들을 입력 받습니다.
print("=" *100)
print(" 네이버")
print("=" *100)
query_txt = input('1.수집할 자료의 키워드는 무엇입니까?(여러개일 경우 , 로 구분하여 입력): ')
#query_txt = '해양자원,도시재생'
print("\n")

#Step 3. 크롬 드라이버 설정 및 웹 페이지 열기
chrome_path = "c:/temp/chromedriver.exe"
driver = webdriver.Chrome(chrome_path)

url = 'https://www.naver.com/'
driver.get(url) #페이지에 접속
time.sleep(5)

#Step 4. 자동으로 검색어 입력 후 조회하기
element = driver.find_element_by_id("query")
driver.find_element_by_id("query").click( ) #입력창? 클릭
element.send_keys(query_txt) #글자입력
element.send_keys("\n") #엔터키 입력

 

 

다음에서 검색하기

# 다음에서 검색하기

#Step 1. 필요한 모듈을 로딩합니다
from selenium import webdriver
import time          

#Step 2. 사용자에게 검색 관련 정보들을 입력 받습니다.
print("=" *100)
print("다음")
print("=" *100)
query_txt = input('1.수집할 자료의 키워드는 무엇입니까?(여러개일 경우 , 로 구분하여 입력): ')
#query_txt = '해양자원,도시재생'
print("\n")

#Step 3. 크롬 드라이버 설정 및 웹 페이지 열기
chrome_path = "c:/temp/chromedriver.exe"
driver = webdriver.Chrome(chrome_path)

url = 'https://www.daum.net/'
driver.get(url) #페이지에 접속
time.sleep(5)

#Step 4. 자동으로 검색어 입력 후 조회하기
element = driver.find_element_by_id("q")
driver.find_element_by_id("q").click( ) #입력창? 클릭
element.send_keys(query_txt) #글자입력
element.send_keys("\n") #엔터키 입력

 

구글에서 검색하기

# 구글에서 검색하기

#Step 1. 필요한 모듈을 로딩합니다
from selenium import webdriver
import time          

#Step 2. 사용자에게 검색 관련 정보들을 입력 받습니다.
print("=" *100)
print("구글")
print("=" *100)
query_txt = input('1.수집할 자료의 키워드는 무엇입니까?(여러개일 경우 , 로 구분하여 입력): ')
#query_txt = '해양자원,도시재생'
print("\n")

#Step 3. 크롬 드라이버 설정 및 웹 페이지 열기
chrome_path = "c:/temp/chromedriver.exe"
driver = webdriver.Chrome(chrome_path)

url = 'https://www.google.co.kr/'
driver.get(url) #페이지에 접속
time.sleep(5)

#Step 4. 자동으로 검색어 입력 후 조회하기
element = driver.find_element_by_name("q")
driver.find_element_by_name("q").click( ) #입력창? 클릭
element.send_keys(query_txt) #글자입력
element.send_keys("\n") #엔터키 입력

 

경남대학교에서 검색

# 경남대학교 홈페이지에서 검색 돋보기 클릭 후 검색하기

#Step 1. 필요한 모듈을 로딩합니다
from selenium import webdriver
import time          

#Step 2. 사용자에게 검색 관련 정보들을 입력 받습니다.
print("=" *100)
print("경남대학교")
print("=" *100)
query_txt = input('1.수집할 자료의 키워드는 무엇입니까?(여러개일 경우 , 로 구분하여 입력): ')
#query_txt = '해양자원,도시재생'
print("\n")

#Step 3. 크롬 드라이버 설정 및 웹 페이지 열기
chrome_path = "c:/temp/chromedriver.exe"
driver = webdriver.Chrome(chrome_path)

url = 'https://www.kyungnam.ac.kr/sites/ko/index.do'
driver.get(url) #페이지에 접속
time.sleep(5)

#Step 4. 자동으로 검색어 입력 후 조회하기
element = driver.find_element_by_xpath('/html/body/div[2]/div[1]/div/div[3]/ul/li[1]/a')
driver.find_element_by_xpath('/html/body/div[2]/div[1]/div/div[3]/ul/li[1]/a').click( ) #입력창? 클릭

element = driver.find_element_by_name("qt")
driver.find_element_by_name("qt").click( )

element.send_keys(query_txt) #글자입력
element.send_keys("\n") #엔터키 입력

 

 

사이트 접속 -> 키워드 입력 -> 검색 의 순서로 진행

 


위의 네이버 검색 코드와 동일

# 네이버에서 검색하기

#Step 1. 필요한 모듈을 로딩합니다
from selenium import webdriver
import time          

#Step 2. 사용자에게 검색 관련 정보들을 입력 받습니다.
print("=" *100)
print(" 네이버")
print("=" *100)
query_txt = input('1.수집할 자료의 키워드는 무엇입니까?(여러개일 경우 , 로 구분하여 입력): ')
#query_txt = '해양자원,도시재생'
print("\n")

#Step 3. 크롬 드라이버 설정 및 웹 페이지 열기
chrome_path = "c:/temp/chromedriver.exe"
driver = webdriver.Chrome(chrome_path)

url = 'https://www.naver.com/'
driver.get(url) #페이지에 접속
time.sleep(5)

#Step 4. 자동으로 검색어 입력 후 조회하기
element = driver.find_element_by_id("query")
driver.find_element_by_id("query").click( ) #입력창? 클릭
element.send_keys(query_txt) #글자입력
element.send_keys("\n") #엔터키 입력

 

검색어의 뉴스 페이지에서 기사 가져오기

#Step 5.뉴스 선택
driver.find_element_by_link_text('뉴스').click()
time.sleep(2)

#Step 6.Beautiful Soup 로 본문 내용만 추출하기
from bs4 import BeautifulSoup
html_1 = driver.page_source #현재 페이지의 전체 소스코드를 다 가져오기
soup_1 = BeautifulSoup(html_1, 'html.parser')

content_1 = soup_1.find('ul','list_news').find_all('li') # 10개의 li태그
for i in content_1 :
    print(i.get_text().replace("\n"," ").strip()) #stripe 좌우공백없애기
    print("\n")

 

텍스트 파일로 저장하기

    
#Step 7. 표준 출력 방향을 바꾸어 txt 파일에 저장하기
import sys 
f_name = input('결과를 저장할 파일명을 쓰세요(예: c:\\temp\\riss.txt): ')

orig_stdout = sys.stdout #표준출력장치
file = open(f_name , 'a' , encoding='UTF-8')
sys.stdout = file  #모니터에 출력하지 말고 file 에 출력해라 -> redirection

for i in content_1 :
    print(i.get_text().replace("\n",""))

file.close()    
sys.stdout = orig_stdout  #원래대로 변경 - 다시 화면에 출력시켜라    

print('요청하신 데이터 수집 작업이 정상적으로 완료되었습니다')
print('수집된 결과는 %s 에 저장되었습니다' %f_name)

 

다음에서도 동일한 방법으로 진행 이하생략


 

한국관광공사에서 어제의 인기 검색어? 추출하기

 

페이지 접속후 검색어 입력

# 한국관광공사

#Step 1. 필요한 모듈을 로딩합니다
from selenium import webdriver
import time          

#Step 2. 사용자에게 검색 관련 정보들을 입력 받습니다.
print("=" *100)
print("한국관광공사")
print("=" *100)
query_txt = input('1.수집할 자료의 키워드는 무엇입니까?(여러개일 경우 , 로 구분하여 입력): ')
#query_txt = '해양자원,도시재생'
print("\n")

#Step 3. 크롬 드라이버 설정 및 웹 페이지 열기
chrome_path = "c:/temp/chromedriver.exe"
driver = webdriver.Chrome(chrome_path)

url = 'https://korean.visitkorea.or.kr'
driver.get(url) #페이지에 접속
time.sleep(5)

#Step 4. 자동으로 검색어 입력 후 조회하기
element = driver.find_element_by_xpath('//*[@id="inp_search"]')
driver.find_element_by_xpath('//*[@id="inp_search"]').click( ) #입력창? 클릭
element.send_keys(query_txt) #글자입력
element.send_keys("\n") #엔터키 입력

 

beautiful soup로 필요한 내용(인기 검색어) 추출하기

from bs4 import BeautifulSoup
html_1 = driver.page_source #현재 페이지의 전체 소스코드를 다 가져오기
soup_1 = BeautifulSoup(html_1, 'html.parser')

content_1 = soup_1.find('div','box_rightType3').find_all('li') # 10개의 li태그
for i in content_1 :
    print(i.get_text().replace("\n"," ").strip()) #stripe 좌우공백없애기
    print("\n")

 

텍스트 파일로 저장하기

import sys 
f_name = input('결과를 저장할 파일명을 쓰세요(예: c:\\temp\\riss.txt): ')

orig_stdout = sys.stdout #표준출력장치
file = open(f_name , 'a' , encoding='UTF-8')
sys.stdout = file  #모니터에 출력하지 말고 file 에 출력해라 -> redirection

for i in content_1 :
    print(i.get_text().replace("\n",""))

file.close()    
sys.stdout = orig_stdout  #원래대로 변경 - 다시 화면에 출력시켜라    

print('요청하신 데이터 수집 작업이 정상적으로 완료되었습니다')
print('수집된 결과는 %s 에 저장되었습니다' %f_name)

'데이터 청년 캠퍼스(경남대학교) > 수업' 카테고리의 다른 글

2021-07-09  (0) 2021.07.09
2021 - 07 - 02  (0) 2021.07.02
2021-07-01 (2)  (0) 2021.07.01
2021-07-01 (1)  (0) 2021.07.01
2021-06-29  (0) 2021.07.01