# 내 저장공간 확인
pwd
# 라이브러리 import
import pandas as pd
import numpy as np
from selenium import webdriver # 라이브러리(모듈) 가져오라
from selenium.webdriver import ActionChains as AC # 웹브라우저 동작
from tqdm import tqdm
from tqdm.notebook import tqdm
from time import sleep
import time
# 데이터 수집할 키워드 지정
keyword = "SK텔레콤"
keyword
다음뉴스기사 url 수집
# 크롬창 띄우기
driver = webdriver.Chrome("chromedriver.exe") # 맥 : /Users/aiden/Desktop/chromedriver
driver.get("https://search.daum.net/search?w=news&nil_search=btn&DA=NTB&enc=utf8&cluster=y&cluster_page=1&q={}".format(keyword))
time.sleep(3) #문자 안에 변수를 넣고 싶을떼 넣고 싶은 위치에 {}를 쓰고 뒤에 .format(변수)를 넣어준다
# page1에서 다음뉴스 url 수집하기
things = driver.find_elements_by_link_text('다음뉴스')
url_list1 = []
for thing in things:
url1 = thing.get_attribute('href')
url_list1.append(url1)
url_list1
# 2번 페이지로 이동
driver.find_element_by_link_text("2").click( )
# page2에서 다음뉴스 url 수집하기
things = driver.find_elements_by_link_text('다음뉴스')
url_list2 = []
for thing in things:
url2 = thing.get_attribute('href')
url_list2.append(url2)
url_list2
# page1, page2 url 합치기
url_list = (url_list1+url_list2)
print(len(url_list))
url_list
# csv 파일로 url 저장
df = pd.DataFrame({"url":url_list})
df.to_csv('daumnews_urls.csv')
전체 기사 for문으로 수집
# url 갯수
s = len(df['url'])
s
dict = {}
# 페이지당 기사 수집
for i in tqdm(range(0, s)): # len(df['url'])
try:
# 뉴스 크롬창 띄우기
driver = webdriver.Chrome("chromedriver.exe") # 맥 : /Users/aiden/Desktop/chromedriver
driver.get(df['url'][i])
time.sleep(1)
# 기사 데이터 수집
title = driver.find_element_by_css_selector('.tit_view').text
date = driver.find_element_by_css_selector('.num_date').text
angry = driver.find_element_by_css_selector(".emotion_list .selectionbox.type-LIKE.unselected .count").text
like = driver.find_element_by_css_selector(".emotion_list .selectionbox.type-ANGRY.unselected .count").text
sad = driver.find_element_by_css_selector(".emotion_list .selectionbox.type-SAD.unselected .count").text
# 기사 댓글 갯수
review_count = int(driver.find_element_by_css_selector(".num_count").text.replace(',', ''))
# review 수집하기
review_list = []
overlays1 = ".desc_txt"
reviews = driver.find_elements_by_css_selector(overlays1)
for review in tqdm(reviews):
review = review.text
review_list.append(review)
target_info = {}
target_info['기사명'] = title
target_info['날짜'] = date
target_info['좋아요'] = like
target_info['화나요'] = angry
target_info['슬퍼요'] = sad
target_info['댓글 수'] = len(review_list)
target_info['댓글'] = review_list
dict[i] = target_info
print(title, '( 댓글 수:', len(review_list),')')
driver.close()
time.sleep(1)
except:
driver.close()
continue
print(len(dict))
dict
# 판다스로 만들기
import pandas as pd
result_df = pd.DataFrame.from_dict(dict, 'index')
result_df
# result_df.rename(columns={result_df.columns[0] : name}, inplace=True)
안되는 줄 알겠지만 실제로 댓글도 달고 좋아요 누르면 제대로 크롤링 된다...
'제작 도전' 카테고리의 다른 글
파이썬으로 미디어 파이프 튜토리얼 해보기 (2) | 2021.07.27 |
---|---|
파이썬으로 초간단 웹캠 실행기 (0) | 2021.07.27 |
네이버 금융 크롤링 (주식 인기검색종목) (0) | 2021.05.12 |
네이버 금융 크롤링 (주식 테마별 시세) (0) | 2021.05.12 |