웹 크롤링 실습
from selenium import webdriver
from selenium.webdriver.common.by import By
실습에 사용한 웹툰, 결과 등은 계시 X
options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches", ["enable-logging"])
driver = webdriver.Chrome(options=options)
try:
url = '사용 URL'
driver.get(url)
driver.implicitly_wait(2)
driver.execute_script('window.scrollTo(0, (document.body.scrollHeight)-2700);')
u_cbox_list = driver.find_elements(by = By.CLASS_NAME, value = 'u_cbox_list')
comment = driver.find_elements(by=By.CLASS_NAME, value='u_cbox_comment')
path = './data/naverweb.txt' # 댓글 정보 내용을 일반 텍스트 파일 저장
file = open(path, mode='w', encoding='utf-8')
for c in comment:
u_nick = c.find_element(by=By.CLASS_NAME, value = 'u_cbox_nick').text
u_content = c.find_element(by=By.CLASS_NAME, value = 'u_cbox_contents').text
u_date = c.find_element(by=By.CLASS_NAME, value = 'u_cbox_date').text
u_recomm = c.find_element(by=By.CLASS_NAME, value = 'u_cbox_cnt_recomm').text
print(f'닉네임: {u_nick}\t 날짜: {u_date}\t 내용:{u_content}\t\t 조회수: {u_recomm}\n')
print("-" * 60)
file.write(u_nick+ ' '+u_content+' ' +u_date+ ' ' + u_recomm + '\n')
except Exception as ex:
print('web크롤링 에러 발생', ex)
time.sleep(10)
driver.close() #닫기
print(path, '파일 저장 성공')
file.close()
import csv
options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches", ["enable-logging"])
driver = webdriver.Chrome(options=options)
try:
url = '사용 URL'
driver.get(url)
driver.implicitly_wait(2)
driver.execute_script('window.scrollTo(0, (document.body.scrollHeight)-2700);')
u_cbox_list = driver.find_elements(by = By.CLASS_NAME, value = 'u_cbox_list')
comment = driver.find_elements(by=By.CLASS_NAME, value='u_cbox_comment')
result = []
pathCSV = './data/naverweb.csv' # 댓글 정보 내용을 cvs로 저장
with open(pathCSV, mode = 'w', newline = '') as file:
writer = csv.writer(file)
writer.writerow(['닉네임', '날짜', '내용', '조회수'])
for c in comment:
u_nick = c.find_element(by=By.CLASS_NAME, value = 'u_cbox_nick').text
u_date = c.find_element(by=By.CLASS_NAME, value = 'u_cbox_date').text
u_content = c.find_element(by=By.CLASS_NAME, value = 'u_cbox_contents').text
u_recomm = c.find_element(by=By.CLASS_NAME, value = 'u_cbox_cnt_recomm').text
print(f'닉네임: {u_nick}\t 날짜: {u_date}\t 내용:{u_content}\t\t 조회수: {u_recomm}\n')
print("-" * 60)
writer.writerow([u_nick, u_date, u_content, u_recomm])
except Exception as ex:
print('web크롤링 에러 발생', ex)
time.sleep(10)
driver.close() #닫기
# copy를 안쓰는 방식
options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches", ["enable-logging"])
driver = webdriver.Chrome(options=options)
try:
url = '사용 URL'
driver.get(url)
driver.implicitly_wait(1)
driver.execute_script('window.scrollTo(0, (document.body.scrollHeight)-2700);')
u_cbox_list = driver.find_element(by=By.CLASS_NAME, value='u_cbox_list')
comments = driver.find_elements(by=By.CLASS_NAME, value='u_cbox_comment')
result_list = []
pathjson = './data/naverweb.json'
for ct in comments:
u_nick = ct.find_element(by=By.CLASS_NAME, value='u_cbox_nick').text
u_content = ct.find_element(by=By.CLASS_NAME, value='u_cbox_contents').text
u_date = ct.find_element(by=By.CLASS_NAME, value='u_cbox_date').text
u_recomm = ct.find_element(by=By.CLASS_NAME, value='u_cbox_cnt_recomm').text
print(f'닉네임:{u_nick}\t 날짜:{u_date}\t {u_content}\t 조회수:{u_recomm}')
print('- ' * 60)
#------------------------------------------------------------------------------------------------------
#json처리 기술 [key] : value
# 1 import json
# 2 키값이 여러개일때 copy()
# 3 파일 형태로 가져오기 위해 dump()
result_dict = {
"Nick": u_nick,
"Date": u_date,
"Contest": u_content,
"Recomm": u_recomm
}
result_list.append(result_dict)
with open(pathjson, 'w', encoding='utf-8-sig') as f:
json.dump(result_list, f, ensure_ascii=False, indent=4)
#------------------------------------------------------------------------------------------------------
except Exception as ex:
print('web크롤링 에러이유 ', ex)
time.sleep(5)
driver.close() #웹드라이브 닫기
JSON(JavaScript Object Notation)
- 사람이 읽을 수 있고, 시스템에서 구문 분석할 수 있는 방식으로 데이터를 저장, 교환하기 위한 텍스트 기반 형식
- 기본적으로 JSON은 키-값의 형태로 되어 있음
- Javascript에 기반하지만 c, c++, c#, python등 다양한 프로그래밍 언어에서 쉽게 사용 가능함
- 파일 확장자가 .json의 형태