Python
crawling 2 - DBPIA 예제
retill28
2024. 7. 11. 00:23
지난 포스팅에, 웹 크롤링의 기본과 코딩을 기록해두었다.
코드가 점차 하나씩 살이 덧붙여지는 과정을 순차적으로 기록하는 데에 주를 두었다.
분명 따라할 때는 어려운게 없었는데, 이후 여러예제를 하면서,
한번에 코드를 완성하려고 욕심을 두는 경향이 있는걸 알게 되었다.
그래서 처음의 초기 코드부터 살을 붙여가며 코드를 완성하는 과정을 남기는 데에 힘써보려고 한다.
DBPIA 페이지 크롤링
DBPIA 논문에서 원하는 키워드를 입력하여 검색한다.
키워드에 따른 검색결과에서, 3페이지까지의 데이터 수집
수집할 데이터 - (1) 제목 (2) 저자 (3) 링크
- 키워드 입력 받아서, 화면 이동 > url 분석
https://www.dbpia.co.kr/search/topSearch?searchOption=all&query={keyword} 에서
query = 뒤에 나오는 부분이 검색키워드에 해당되는 부분으로 입력받은 키워드를 위와 같이 url에 쓴다.
# 키워드를 사용자에게 입력받아서 키워드를 검색한 페이지로 이동 keyword = input('찾고자 하는 논문 주제를 입력하세요.') url = f'https://www.dbpia.co.kr/search/topSearch?searchOption=all&query={keyword}' browser.get(url)
- 논문 제목들만 받아와서 리스트로 넣는다. 논문제목에 해당하는 요소는 'thesis__tit'.
같은 방법으로 논문 저자들도 받아와서 리스트화 한다.# (1) 제목 데이터 # browser.find_element(By.CLASS_NAME, 'thesis__tit').text titles = browser.find_elements(By.CLASS_NAME, 'thesis__tit') for i in titles: print(i.text) #데이터가 잘 뽑혔는지 출력해서 확인 # (2) 저자 데이터 # browser.find_element(By.CLASS_NAME, 'thesis__item').text authors = browser.find_elements(By.CLASS_NAME, 'thesis__info') for i in authors: print(i.find_element(By.CLASS_NAME, 'thesis__item').text)
- 제목이나 그 칸을 클릭할 때 논문 상세 페이지로 이동하는데, 이 이동하는 링크를 가져오려고 한다.
하지만 링크는 classname이 아니라, html 요소 중 'href'라는 속성에 해당한다.
따라서, find_element()로 요소를 호출한다음, 이어서 get_attribute()함수를 사용한다.
# (3) 링크 데이터 # browser.find_element(By.CLASS_NAME, 'thesis__link').get_attribute('href') links = browser.find_elements(By.CLASS_NAME, 'thesis__link') link_list = [] for i in links: link = i.get_attribute('href') link_list.append(link)
- 링크 데이터로 얻어온 url을 순회하며 웹사이트를 이동한다.
그럼 아래와 같은 화면으로 이동한다.
링크 리스트의 링크들을 이동하면서 초록, 저자 데이터를 가져온다.
아래처럼 초록이 없는 경우엔 오류가 날 수 있으므로 예외처리도 같이 한다.chorok_list = [] for i in link_list: browser.get(i) # 상세페이지로 이동 try: 초록 = browser.find_element(By.CLASS_NAME, 'abstractTxt').text 저자 = browser.find_element(By.CLASS_NAME, 'authorList').text except: 초록 = '없음.' 저자 = '없음.' chorok_list.append({ '저자':저자, '초록':초록 })
- chorok_list 출력 결과