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()
# ----------------------------------------------------------------------------------------------------
'IT와 꿍짝' 카테고리의 다른 글
Apache 2.x 특정 디렉토리 이하 보안 로그인 설정하기 입니다. (0) | 2015.11.10 |
---|---|
리눅스(linux) 파일 갯수 구하는 방법입니다. (0) | 2015.10.28 |
windows에서 자동 예약으로 윈도우즈 종료하기(shutdown) (0) | 2015.10.23 |
리눅스 파일 찾기(검색) 명령: find 사용법 (0) | 2015.10.22 |
파일명을 추출하여 윈도우 SORT 명령, 숫자 크기순 정렬(소팅) 문제 해결, Perl(펄)로 하기 (0) | 2015.10.20 |
댓글