본문 바로가기
IT/Digital

파이썬 - 셀레니움, 네이버 카페 크롤링 ( 회원별 글 수, 댓글 수)

by 청바지 입고 개발자 2021. 7. 11.
반응형

안녕하세요

오늘은 파이썬과 셀레니움 엔진을 이용해서 네이버 카페 정보를 크롤링하는 프로그램 개발에 대한 리뷰입니다.

네이버 아는 카페 관리자 분들이 일일이 각종 통계를 노가다 검색을 통해서 카운팅 한다는 이야기를 듣고 이 무슨 디지털 시대에 노가다인가 하고 생각하며 자동화 프로그램을 이용해 네이버 카페의 게시글 수와 댓글 수를 카운팅 해보는 프로그램을 만들어 보았습니다.

파이썬 + 셀레니움 조합을 사용해서 개발을 해보았고

결론적으로 아주 잘 되네요

시행착오를 겪으면서 확인된 내용들을 정리해 보았습니다.

셀레니움이란?

셀레니움은 파이어폭스, 인터넷 익스플로어, 크롬등과 같은 브라우저를 컨트롤 할 수 있게 해줍니다. 현재 파이썬 3.5 이상부터 지원되며 3.6 이상 버전 부터 pip 로 표준 라이브러리로 사용할 수 있습니다.

이 엔진을 기반으로 자동화 테스트 도구 AI엔진 개발시에도 사용을 많이 하고 있습니다.

크롤링이란 ?

크롤링(crawling) 혹은 스크레이핑(scraping)은 웹 페이지를 그대로 가져와서 거기서 데이터를 추출해 내는 방법입니다.. 크롤링하는 소프트웨어는 크롤러(crawler)라고 부릅니다. 긁어내는 거죠 !

작성에 필요한 기능들 및 소스 설명

로그인 회피

카페등에서 필요한 정보를 검색하기 위해서는 네이버에 실제 로그인을 하고서 진행해야 정확합니다. 네이버는 사람이 아닌 기계가 들어왔다고 판단하면 캡차 기능이란 것으로 로그인을 검증 합니다.

캡차(CAPTCHA)란?

웹사이트에서 스팸메일 활동이나 해킹을 막기 위해 사람과 컴퓨터(주로 프로그램)를 판별해주는 기술입니다. . 캡차는 ‘Completely Automated Public Turing test to tell Computers and Humans Apart’의 알파벳 앞 글자를 따서 만들었다고 하네요.

직역하면 ‘완전히 자동화된 사람과 컴퓨터 구분’이란 뜻이다.

네이버의 캡차를 회피하기 위한 로직이 들어가야 됩니다.

클립보드를 컨트롤 할 수 있는 라이브러리를 활용하여 로그인한 것과 동일한 결과를 만들어 냈습니다.

1
2
3
4
5
6
7
8
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
import time
import pyperclip
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from openpyxl import load_workbook

#클립보드에 input을 복사한 뒤
#해당 내용을 actionChain을 이용해 로그인 폼에 붙여넣기
def copy_input(xpath, input):
    pyperclip.copy(input)
    driver.find_element_by_xpath(xpath).click()
    ActionChains(driver).key_down(Keys.CONTROL).send_keys('v').key_up(Keys.CONTROL).perform()
    time.sleep(2)
    
cs

 

엑셀을 이용한 명단 읽기

엑셀에 있는 명단을 읽어서 해당 작성자의 댓글 수와 글작성 수를 체크하여 엑셀에 정리하는 것까지 만들어 보았습니다.

wb = load_workbook("C:/python/result.xlsx", data_only = True) sr = wb['Sheet1'] idx = 2 print("=============댓글 세기") for row in sr.rows: #엑셀에서 차례로 이름가져오기 i = str(idx) ac = sr['A'+i].value if ac == None: break #조회 기준 엑셀에 있는 이름으로 set driver.find_element_by_xpath('//*[@id="queryTop"]').clear() driver.find_element_by_xpath('//*[@id="queryTop"]').send_keys(ac) #조회 버튼 클릭 driver.find_element_by_xpath('//*[@id="main-area"]/div[1]/div[1]/form/div[4]/button').click()

엑셀에서 읽은 명단을 스크립트로 검색 수행 및 글 수 카운팅

이부분에서 약간의 산수가 들어갑니다. 글 개수가 많을 경우 페이징 인덱스 결과로 나오기 때문에 약간의 꼼수가 필요합니다.

검색 및 계산된 결과를 엑셀에 다시 쓰기

#엑셀에서 쓸 totCommCnt 값 구하기 #엑셀 파일에 쓰기 sr.cell(int(i),3,int(totCommCnt) ) #엑셀 파일에 저장 wb.save('C:/python/result.xlsx') print("프로그램 종료합니다.")

1000명 정도의 글 수도 몇분 안에 조회가 가능할 것으로 보입니다.

추출 예시

하나의 EXE실행파일 형태 만들기

(파이썬이 설치되지 않은 PC에서도 돌아가게)

c:\python\pyinstaller --onefile a.py

파이썬 - exe 실행파일 만들기

안녕하세요 오늘은 파이썬을 이용해 프로그래밍한 소스를 실행파일 형태로 만들어서 배포할 수 있는 방법에 대해서 알아보려고 합니다.  파이썬 프로그램을 패키징해서 배포하는 방법에도 여

dreamdeveloper403.tistory.com

웹 크롤링 - 앞으로 더 할 수 있는 것들

이번에 작업해 보면서 웹에서 내가 필요한 정보들을 아주 쉽게 크롤링 할 수 있다는 사실을 알았습니다.

네이버나 카카오 플랫폼은 각종 통계 정보를 그들 입맛에 맞게 제공하기 때문에 그들이 제공하지 않는한 내가 원하는 정보를 확인하는데 제약이 있습니다.

잘만 활용하면 굉장히 유익한 정보가 될 수 있다고 생각합니다.

내가 관심있는 기업에 대한 기사들을 모아서 내 메일이나 파일로 자동 정리해 준다던지

웹에서 각종 데이터들을 추출하여 나만의 스몰데이터를 만든다던지 사용할 수 있는 것이 무궁무진할 것 같네요.

오늘은 파이썬을 사용하여 네이버카페를 크롤링 해서 글 수를 세는 프로그램에 대한 리뷰 였습니다.

파이썬 작지만 막강하네요 여타의 프레임워크들보다 사용성이 우수해 보입니다

파이썬 - 실행파일 용량 최적화하기

안녕하세요 지난번에는 파이썬을 이용해서 실행파일 만드는 방법에 대해서 확인을 했었는데요 오늘 파이썬 실행파일 용량을 최적화할 수 있는 방법이 있어서 정리해 보았습니다. 구글링을 해

dreamdeveloper403.tistory.com

반응형

댓글