Jupyter 크롤링(코드리뷰)

김인기·2023년 1월 2일
0

Jupyter를 사용하여 홈페이지를 크롤링하는 순서를 알아가도록 하겠습니다.

  1. selenitum을 다운받습니다.
pip install selenium
  1. selenium에서 webdriver가 사용될 수 있도록 다음 코드를 작성합니다.
    요소를 가져올 수 있는 By 태그를 사용하기 위해 webdriver으로부터 가져옵니다.
from selenium import webdriver
from selenium.webdriver.common.by import By
  1. 크롤링 할 웹브라우저를 선택해야합니다. 저는 Chrome을 선택하였고
    Chrome.driver까지 다운로드하였습니다.
browser = webdriver.Chrome()
  1. input 태그를 생성하여 search_name을 같은 속성값으로 설정하였습니다.
    url에 주소를 첨부하여 url의 속성값을 설정하였고
    url과 input태그를 합하는 값을 new_url에 설정했습니다.

다음 코드를 보시면 url.format 태그를 사용하여 url의 빈 곳 {}에 input(검색어)을 입력하도록 하였습니다.
최종적으로 브라우저는 new_url의 값을 얻습니다.

search_name = input("검색어")
url = "https://www.dbpia.co.kr/search/topSearch?searchOption=all&query={}"
new_url = url.format(search_name)
browser.get(new_url)
  1. 다음 코드들은 하나씩 설명해드리며 코드를 이해해보겠습니다.
links = browser.find_elements(By.CLASS_NAME, 'thesis__link') 
#links 태그는 browser 안에서 elements(요소들)를 find(찾기)하는 코드입니다.
#thesis__link의 CLASS_NAME을 찾습니다.

import time
time.sleep(3)
#작업량의 오류가 발생하는 것을 방지하기 위해 속도를 설정했습니다.
link_list = []
for link in links:
    link_list.append(link.get_attribute('href')) 
# 반복문 for를 사용하여 links 태그들을 in함수를 사용하여 link에 포함시킵니다.
# link 안에서의 'href'들의 코드를 적용시키기 위해 attribute태그를 사용하였고 
# 데이터들이 link_list=[]안에 들어가도록 하였습니다.
for link in link_list:
    browser.get(link)
#반복문 for를 사용하여 link_list의 값들을 link로 지정하였고
#브라우저가 해당 링크들을 얻을 수 있도록 하였습니다.
    content = ""
    try:
        content = browser.find_element(By.CLASS_NAME, "abstractTxt")
    except:
        content = browser.find_element(By.CLASS_NAME, "noData")
 #try문과 except문을 사용하여 요소값이 있으면 실행하고 없으면 오류가 발생하는 점을 해결했습니다.
 
    print(content.text)

7. 내가 입력한 값 만큼 페이지를 이동하는 프로그램 코드 작성

browser.get("https://www.dbpia.co.kr/search/topSearch?searchOption=all&query=%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5")
# 브라우저에 링크값을 설정했습니다.
page = int(input("크롤링 하고 싶은 페이지 수를 입력하세요."))
#page에 input태그를 적용하여 값을 넣도록 하였습니다.
import time
for i in range(2,page+1):
    xpath = '//*[@id="pageList"]/a[{}]'.format(i)
    time.sleep(3)
    browser.find_element(By.XPATH, xpath).click()
    
#반복문 for를 사용하였고 range범위를 정하여 2~page(입력값)+1를 하도록 하였습니다.
#xpath에 XPATH주소를 적용하였고 format(i)태그를 사용하여 입력값이 {}에 들어가서 XPATH의 주소가 값에 의해 이동되도록 하였습니다.
#브라우저의 element요소(XPATH,xpath)를 클릭하도록 했습니다.

8. 7번에 작성한 코드와 5,6번의 코드를 합하여 원하는 페이지까지 이동하여 원하는 값을 가져오는 코드를 작성하였습니다.

browser.get("https://www.dbpia.co.kr/search/topSearch?searchOption=all&query=%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5")
page = int(input("크롤링 하고 싶은 페이지 수를 입력하세요."))

link_list = []
import time
for i in range(2,page+1):
    links = browser.find_elements(By.CLASS_NAME, 'thesis__link')  
    for link in links:
        link_list.append(link.get_attribute('href')) 

        
    xpath = '//*[@id="pageList"]/a[{}]'.format(i)
    time.sleep(3)
    browser.find_element(By.XPATH, xpath).click()
print(link_list)
  
for link in link_list:
    browser.get(link)
    
    content = ""
    try:
        content = browser.find_element(By.CLASS_NAME, "abstractTxt")
    except:
        content = browser.find_element(By.CLASS_NAME, "noData")
    
    print(content.text)
       
   
profile
성장노트

0개의 댓글