네이버 블로그 크롤링하기
#Step 1. 필요한 모듈을 로딩합니다
from selenium import webdriver
import time
#Step 2. 사용자에게 검색 관련 정보들을 입력 받습니다.
print("=" *100)
print(" 연습문제 6-5: 블로그 크롤러 : 여러건의 네이버 블로그 정보 추출하여 저장하기")
print("=" *100)
query_txt = input('1.크롤링할 키워드는 무엇입니까?(예: 여행): ')
include = input('2. 결과에서 반드시 포함하는 단어를 입력하세요(예: 국내, 바닷가)\n(여러개일 경우 , 로 구분해서 입력하고 없으면 엔터 입력하세요): ')
in_li =include.split(',')
exclude = input('3. 결과에서 제외할 단어를 입력하세요(예: 분양권, 해외)\n(여러개일 경우 , 로 구분해서 입력하고 없으면 엔터 입력하세요): ')
ex_li = exclude.split(',')
start = input('조회 시작일자 입력(예:2017-01-01): ')
st_li = start.split('-')
end = input('조회 종료일자 입력(예:2017-04-20): ')
ed_li = end.split('-')
collect_cnt = int(input('크롤링 할 건수는 몇건입니까?(최대 100건): '))
#Step 3. 수집된 데이터를 저장할 파일 이름 입력받기
f_dir = input("파일을 저장할 폴더명만 쓰세요(기본값:c:\\temp\\):")
if f_dir == '' :
f_dir="c:\\temp\\"
#Step 4. 크롬 드라이버 설정 및 웹 페이지 열기
chrome_path = "c:/temp/chromedriver.exe"
driver = webdriver.Chrome(chrome_path)
url = 'https://www.naver.com/'
driver.get(url)
time.sleep(2)
Step 4. 자동으로 검색어 입력 후 조회하기
element = driver.find_element_by_id("query")
driver.find_element_by_id("query").click( ) #입력창? 클릭
element.send_keys(query_txt) #글자입력
if in_li[0] != '':
for i in in_li:
element.send_keys(' +'+i)
if ex_li[0] != '':
for j in ex_li:
element.send_keys(' -'+j)
element.send_keys("\n") #엔터키 입력
st_li[1] = str(int(st_li[1]))
st_li[2] = str(int(st_li[2]))
print(st_li)
ed_li[1] = str(int(ed_li[1]))
ed_li[2] = str(int(ed_li[2]))
print(ed_li)
## Step 5.view
driver.find_element_by_link_text('VIEW').click()
time.sleep(2)
#Step view
driver.find_element_by_link_text('블로그').click()
time.sleep(2)
driver.find_element_by_xpath('//*[@id="snb"]/div[1]/div/div[2]').click()
driver.find_element_by_xpath('//*[@id="snb"]/div[2]/ul/li[3]/div/div[1]/a[9]').click()
driver.find_element_by_xpath('//*[@id="snb"]/div[2]/ul/li[3]/div/div[2]/div[1]/span[3]/a').click()
driver.find_element_by_link_text(ed_li[0]).click()
time.sleep(1)
driver.find_element_by_link_text(ed_li[1]).click()
time.sleep(1)
driver.find_element_by_link_text(ed_li[2]).click()
time.sleep(1)
driver.find_element_by_xpath('//*[@id="snb"]/div[2]/ul/li[3]/div/div[2]/div[1]/span[1]/a').click()
time.sleep(1)
driver.find_element_by_link_text(st_li[0]).click()
time.sleep(1)
driver.find_element_by_link_text(st_li[1]).click()
time.sleep(1)
driver.find_element_by_link_text(st_li[2]).click()
driver.find_element_by_xpath('//*[@id="snb"]/div[2]/ul/li[3]/div/div[2]/div[3]/button').click()
옵션에서 날짜 선택하기
#Step 7.Beautiful Soup 로 본문 내용만 추출하기
from bs4 import BeautifulSoup
html_1 = driver.page_source
soup_1 = BeautifulSoup(html_1, 'html.parser')
content_1 = soup_1.find('ul','lst_total').find_all('li')
for i in content_1 :
print(i.get_text().replace("\n",""))
#Step 9. 데이터 수집하기
address2 = [] #블로그 주소
name2 = [] #작성자 닉네임
rdate2 =[] #작성일자
contents2=[] # 내용
no = 1 # 게시글 번호 초기값
html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')
content_list = soup.find('ul','lst_total').find_all('li')
for i in content_list:
# 1.블로그주소
print("\n")
print("%s 번째 정보를 추출하고 있습니다============" %no)
address = i.find('div','total_wrap api_ani_send').find('a')['href']
print('블로그 주소: ',address)
address2.append(address)
# 2. 작성자닉네임
name = i.find('a','sub_txt sub_name').get_text().strip()
print('제목: ', name)
name2.append(name)
#게시글 들어가기
driver.find_element_by_id('sp_blog_%d' %no).click()
#i.find('ul','lst_total').find_all('div').click()
# link = i.find('a')['href']
# link1 = link
# driver.get(link1)
#게시글 전체 불러오기
#Step 7.Beautiful Soup 로 본문 내용만 추출하기
html_2 = driver.page_source
soup_2 = BeautifulSoup(html_2, 'html.parser')
content_2 = soup_2.find('div','se-viewer se-theme-default')
# 3. 작성일자
date=content_2.find('div','se-component-content').find('div','blog2_container').find('span','se_publishDate pcol2').get_text()
se-component-content
rdate2.append(date.strip())
print("작성일자 : ", date)
# 4. 내용
content=content_2.find_all('span').get_text().strip()
content2.append(content.strip())
print("내용 : %s" %content.strip())
네이버 블로그는 크롤링을 막아놓아서 iframe 문제를 해결해야해야 크롤링이 가능함
하지만 iframe에서 해결하짐 못해서 마무리
'데이터 청년 캠퍼스(경남대학교) > 스터디' 카테고리의 다른 글
2021-07-15 (0) | 2021.07.16 |
---|---|
2021-07-14 (0) | 2021.07.14 |
2021-07-12 (0) | 2021.07.12 |
2021 - 07 - 07 (0) | 2021.07.07 |
2021-07-06 (0) | 2021.07.06 |