파이썬 카카오 검색 API 활용 웹스크래핑 (tistory.com)
1편에 이은... 2편이다.
지난 시간에는 API를 이용해서 블로그의 타이틀과 링크 데이터를 가져왔다.
이번 시간에서는 link에서 WebScraping을 통해 텍스트 데이터를 추출해보자!
네이버 블로그 웹스크래핑
## 필요 모듈 import
import re
from bs4 import BeautifulSoup
import urllib.request
## 정규표현식으로 네이버 블로그 링크만 뽑기
p = re.compile('https:\/\/blog\.naver\.com\/[a-zA-Z0-9_-]+\/\d+')
nb_links = p.findall(text)
print(nb_links)
위 코드를 실행 해보자.
카카오 API를 사용해서 가져온 링크 중에서, naver와 관련된 링크들만 뽑아온다! 다음은 블로그 없나;
일단 정적 웹스크래핑 시도 해보도록하자.
## beautifulsoup를 활용해 확인
nb_link = nb_links[0]
html = urllib.request.urlopen(nb_link)
bs_obj = BeautifulSoup(html, 'html.parser')
bs_obj
아앗! 네이버 블로그는 정적 웹스크래핑으만으로는 안되나보다!
그래서...
위 블로그를 참조하여 내 입맛대로 코드를 수정하고, iframe에 있는 텍스트 데이터를 불러왔다.
## 동적 웹스크래핑을 위한 selenium import
from selenium import webdriver
driver = webdriver.Chrome('C://Users//jeauk//chromedriver.exe')
driver.implicitly_wait(3)
## 추가적인 에러 생성 제거를 위한 import
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException, UnexpectedAlertPresentException, NoAlertPresentException
import time
## 웹 드라이버 초기화
driver = webdriver.Chrome()
## 빈 list 생성
contents = []
links = []
# 네이버 블로그 링크 하나씩 불러오기
for i in nb_links:
driver.get(i)
time.sleep(3)
## 블로그 안 본문이 있는 iframe에 접근하기
try:
driver.switch_to.frame("mainFrame")
## 예상치 못한 알림 창이 나타났을 때 프로그램이 중지하는 것을 방지
except UnexpectedAlertPresentException:
try:
alert = driver.switch_to.alert
alert.accept()
except NoAlertPresentException:
pass
continue
## 본문 내용 크롤링하기
try:
a = driver.find_element(By.CSS_SELECTOR, 'div.se-main-container').text
contents.append(a)
links.append(i)
## NoSuchElement 오류시 예외처리(구버전 블로그에 적용)
except NoSuchElementException:
a = driver.find_element(By.CSS_SELECTOR, 'div#content-area').text
contents.append(a)
links.append(i)
driver.quit() # 창닫기
print("<<본문 크롤링이 완료되었습니다.>>")
위 코드를 돌리면 본문 텍스트를 읽어올 수 있다!
참고로 난 본문 텍스트만 모델링 하기위해서 나머지 데이터(타이틀,링크)는 나중에 다 생략했다.
필요하면 코드를 조금만 수정해도 가능하다.
## 본문의 \n 제거 (전처리 과정에서 해도 되지만 알아보기 너무 불편했다.)
nb_contents=[]
for i in contents:
a = i.replace('\n','')
nb_contents.append(a)
import pandas as pd
df = pd.DataFrame({'Text Data':nb_contents})
df
## csv파일로 저장
df.to_csv('test.csv', encoding='utf-8-sig')
# df.to_csv('test.csv', encoding='utf-8')
위 코드를 돌리면 \n을 삭제해서 데이터프레임을 만들고 csv파일로 저장한다!
참으로 간단하죠잉?!
이렇게 하면 네이버 블로그 본문 텍스트 데이터를 가져올 수 있다.
tistory는 정적이기 때문에 매우 쉬우므로... 생략하거나 다음 글에 넣도록하겠다. 이상!
'데이터사이언스 대학원 생활 > TextAnalytics' 카테고리의 다른 글
파이썬 유튜브(Youtube)API 활용 /원하는 키워드 영상 댓글 추출 (0) | 2023.07.14 |
---|---|
파이썬 카카오 검색 API 활용 웹스크래핑(3) (0) | 2023.07.13 |
파이썬 카카오 검색 API 활용 웹스크래핑 (0) | 2023.05.26 |
Selenium 설치 방법 (0) | 2023.03.20 |
정규 표현식(Regular Expression) (0) | 2023.03.14 |