목차
1. Overview
네이버 블로그 주소 URL 를 추출하여 해당 URL에 있는 블로그 내용을 크롤링하고자 한다.
2. Code
2-1. 라이브러리 및 모듈
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.by import By
import re
from bs4 import BeautifulSoup
import time
import pandas as pd
2-2. 크롤링할 네이버 블로그 주소 df 만들기
# 드라이버 경로 지정
driver_path = 'C:/*****/chromdriver.exe' #본인 driver 주소 입력
driver = webdriver.Chrome(driver_path)
driver.implicitly_wait(3)
# 검색할 url 얻는 함수 만들기
def get_blog_search_url(keyword, start_date, end_date, page):
url = 'https://section.blog.naver.com/Search/Post.naver?'
url += f'pageNo={page}&rangeType=WEEK&orderBy=sim&'
url += f'startDate={start_date}&endDate={end_date}&keyword={keyword}'
return url
# 블로그에 내용을 크롤링하는 함수 만들기
def get_one_page_blog_urls(driver):
html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')
one_page_blog_urls = [a['href'] for a in soup.select('div > a.desc_inner')]
return one_page_blog_urls
# 1~10페이지로 반복하여 이동하며 70개의 블로그 url 추출
page_num = 10
keyword = '제주도맛집'
start_date = '2023-05-04'
end_date = '2023-05-11'
total_blog_url_list = []
page_nums_list = []
for i in range(1, page_num+1):
url = get_blog_search_url(keyword, start_date, end_date, i)
driver.get(url)
time.sleep(3)
one_page_blog_urls = get_one_page_blog_urls(driver) # 7개
total_blog_url_list += one_page_blog_urls #.extend() 사용해도 됌
page_nums_list += [i] * len(one_page_blog_urls)
# df 형태로 저장
url_dict = dict()
url_dict['page'] = page_nums_list
url_dict['blog_url'] = total_blog_url_list
df = pd.DataFrame(url_dict)
df.to_excel('네이버블로그_제주도맛집_URL.xlsx', index=False)
결과)
2-3. 네이버 블로그 내용 크롤링 하는 함수 get_content 만들기
# url에 들어가서 날짜, 제목, 내용을 크롤링하는 함수 생성
def get_content(driver):
driver.switch_to.frame('mainFrame') #네이버 블로그가 iframe에 씌어져 있어서 frame 안으로 이동해야함
html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')
try:
# 날짜
date = soup.select_one('span.se_publishDate').get_text()
except:
date = ''
try:
# 제목
title = soup.select_one('div.se-title-text').get_text().strip()
except:
title = ''
try:
# 내용
content = soup.select_one('div.se-main-container').get_text()
content = re.sub('[^0-9가-힣a-zA-Z.,:~#-?!]',' ',content)
content = re.sub(' +',' ',content)
except:
content = ''
# URL
url = driver.current_url
data = [date, title, content, url]
return data
2-4. 모든 네이버 블로그 주소를 다니며 크롤링 하여 df 으로 저장하기
results = []
num = 10
for i in range(num):
driver.get(df_url['blog_url'][i])
time.sleep(2)
blog_data = get_content(driver)
results.append(blog_data)
# df 형태로 저장
df = pd.DataFrame(results)
df.columns = ['날짜', '제목', '내용', 'URL']
df.to_excel('블로그내용_10개.xlsx')
results[9]
결과)
'Python > 웹크롤링' 카테고리의 다른 글
(웹크롤링)파이썬, python, BeautifulSoup_ 3. 멜론 차트 크롤링 (0) | 2023.05.18 |
---|---|
(웹크롤링)파이썬, python, BeautifulSoup_ 2. BeautifulSoup 설치 및 기본 (0) | 2023.05.17 |
(웹크롤링) 1. 웹크롤링 Intro (0) | 2023.05.17 |
댓글