본문 바로가기
프로그래밍/Python

Python(파이썬) 특정 단어포함하는 신문기사 웹 크롤러 만들기(Web Cralwer) -1

by LiveData 2018. 12. 1.
반응형



1. 시작




동아일보, 한겨레 신문에서 이슈 단어 크롤링 하기!!



특정 단어가 포함된 신문기사를 읽어드려 그 기사를 크롤링 하는 프로그램입니다..



아래의 홈페이지가 동아일보 기사가 쓰인 홈페이지입니다.





http://www.donga.com/#


 




간단한 원리를 설명하자면


1. 특정 단어를 통해서 신문기사를 검색해 관련 기사의 목록을 얻어온다.


2. URL 주소 패턴을 분석해 반복문으로 여러 목록 페이지를 돌며 올라와 있는 URL을 얻어온다.


3. 얻어낸 기사의 링크 주소를 하나하나 접근하여 본문 내용만 추출해 파일에 저장한다.




끝. 결국 주요 원리는 URL 주소 패턴으로 기사 내용 추출!





코드 설명


1
2
3
4
import sys
from bs4 import BeautifulSoup
import urllib.request
from urllib.parse import quote
cs







import sys : 터미널에서 사용자로부터 인자를 받기위해.


urllib.request : 요청을 보내고 응답을 받기위해.


BeautifulSoup : 받은 응답(HTML 코드)를 파싱하기 위해.


import quote : URL주소에 한글(UTF-8)이 포함되었을 때 , 이를 아스키(ASCII)형식으로 바꿔주기 위한 함수.



만약 나중에 실행을 했는데 1~4 번째 줄에서 오류가 발생한다면


해당 모듈이 설치가 되지 않아서 입니다. pip를 이용해서 설치를 하시면 됩니다. (설치법은 전 포스트에...)





다음 기사를 추출해올 Target URL 코드


1
2
3
TARGET_URL_BEFORE_PAGE_NUM = "http://news.donga.com/search?p="
TARGET_URL_BEFORE_KEWORD = '&query='
TARGET_URL_REST = '&check_news=1&more=1&sorting=1&search_date=1&v1=&v2=&range=1'
cs







1. 메인 홈페이지 URL 상태이고 오른쪽 상단의 검색창에 "대통령선거" 라는 단어를 검색한다.







2. 아래와 같이 URL이 바뀌는 것을 알 수 있고 query에 입력했던 단어가 들어갔다.






3. 빨간색 네모칸에 옵션을 주어 웹동아일보에서만 하는 URL을 만들어 보았다.



4. 15페이지의 최신순으로 된 기사만 뜨게 된다.



옵션을 설명하자면


"check_news=1" : 뉴스로 한정지은 것


"more=1" : 더보기를 누른상태 (원래 5개 기본보기를 15개 기본보기로 늘림.)


"sorting=1" : 최신순 정렬


"range=1" : 전체 범위 (웹 동아일보 라는 곳 한정)


"query="대통령선거"\" : 우리가 입력한 단어






더 많은 기사를 추출하기 위해 페이즈를 2페이지로 넘긴다면 어떻게 될까?




 


전에 검색한 것과 다르게 URL이 바뀌었습다.



http://news.donga.com/search?p=16&query="대통령선거"&check_news=1&more=1&sorting=1&search_date=1&v1=&v2=&range=1



화살표에 있는 것처럼 16으로 바뀌었는데



이 의미는 "1페이지에 15개가 있고 2페이지 시작은 16부터 시작이야!" 라는 의미입니다.





1
2
3
TARGET_URL_BEFORE_PAGE_NUM = "http://news.donga.com/search?p="
TARGET_URL_BEFORE_KEWORD = '&query='
TARGET_URL_REST = '&check_news=1&more=1&sorting=1&search_date=1&v1=&v2=&range=1'
cs








이제 코드를 다시 보면 이 코드가 의미하는 바를 이해할 수 있습니다.




반응형