본문 바로가기
IT와 꿍짝

python(파이썬) 2.7으로 웹 크롤러(web crawler) 구현하기 - 다음 실시간 검색어 1위에서 10위

by 해피비(HappyB, Happy plan B) 2015. 10. 25.
반응형



python(파이썬) 2.7으로 웹 크롤러(web crawler) 구현하여 보았습니다.- 다음 실시간 검색어 1위에서 10위

참조 URL에서 네이버 검색을 수정하여 다음을 만들었습니다. 

또한 실시간 검색의 변경 추이를 알아보고자 로그로 일단위 저장을 하였습니다.

Beautiful Soup을 설치하여야 하며, 해당 파일이 있는 곳에서 아래처럼 실행하면 됩니다.(Windows cmd 기준)

C:TEMP> python daumTopRank.py


아래는 구현 화면입니다.


아래는 소스입니다. (소스 별도 첨부)

# ----------------------------------------------------------------------------------------------------

#-*- encoding: utf-8 -*-  ver 1.1

# file name: daumTopRank.py

#실시간 검색어 : daum


import requests as rs

import bs4

import time

import datetime

import logging

import logging.handlers


def getTopRank(logger):

daum_url = 'http://www.daum.net'

#1)요청

response = rs.get(daum_url)


#2)응답으로 부터 HTML 추출

html_content = response.text.encode(response.encoding);


#3)HTML 파싱

navigator = bs4.BeautifulSoup(html_content, "html.parser")


#4)네비게이터를 이용해 원하는 태그 리스트 가져오기

realRankTag = navigator.find_all(id='realTimeSearchWord')

        

resultList = realRankTag[0].find_all(tabindex=True)

        #4-1) 불필요한 tag 제거

        #del resultList['strong']


#5)키워드 추출


# keywords = [item['href'] for item in resultList ]

logger.info('========================================')

        now = datetime.datetime.now()

        logger.info(now.strftime("%Y/%m/%d %H:%M:%S"))

logger.info('========================================')


#6)키워드 출력


# for index, keyword in enumerate(keywords) :  

        for index, keyword in enumerate(resultList) :  

if index == 0:

                        #del keyword['href']

                        #del keyword['class']  

                        #del keyword['tabindex']    

                resultText = '[%2d위] %s'%(index+1,keyword.strong.next_element.encode('utf-8'))

else:

resultText = '[%2d위] %s'%(index+1,keyword.next_element.replace('\n', '').replace('\r', '').encode('utf-8'))

infoText = resultText.decode('utf-8').encode('euc-kr')

                logger.info(infoText)

logger.info('')



daemon_flag = True;

reflash_time= 10;


def Daemon():

# 1. 로거 인스턴스를 만든다

logger = logging.getLogger('mylogger')


# 포매터를 만든다

#fomatter = logging.Formatter('[%(levelname)s|%(filename)s:%(lineno)s] %(asctime)s > %(message)s')

fomatter = logging.Formatter('')


# 스트림과 파일로 로그를 출력하는 핸들러를 각각 만든다.

        filedate = datetime.datetime.now()

        fileHandler = logging.FileHandler('./myLog_%s.log'%(filedate .strftime("%Y%m%d")) )

streamHandler = logging.StreamHandler()


# 각 핸들러에 포매터를 지정한다.

fileHandler.setFormatter(fomatter)

streamHandler.setFormatter(fomatter)


# 로거 인스턴스에 스트림 핸들러와 파일핸들러를 붙인다.

logger.addHandler(fileHandler)

logger.addHandler(streamHandler)


# 로거 인스턴스로 로그를 찍는다.

logger.setLevel(logging.DEBUG)


while (daemon_flag):

getTopRank(logger);

time.sleep(reflash_time)


if __name__ == '__main__':

Daemon()

# ----------------------------------------------------------------------------------------------------

참조 URL:


감사합니다.



daumTopRank.py


반응형

댓글