웹 크롤러를 만드는 예제의 기본중의 기본
네이버 뉴스 웹 크롤러를 만들어 보고자 한다.
네이버 뉴스 중 IT/과학 분야의 타이틀과 링크를 가져와서 출력하는 웹 크롤러 예제이다.
requests와 re, BeautifulSoup을 활용하여 만들 예정이며, 20줄도 안되는 파이썬 코드로 충분히 만들 수 있다.
크롤러를 만드는 코드는 생각보다 어렵지 않다.
크롬 개발자 도구에서 내가 가져오고자 하는 정보가 어떤 태그로 이루어져 있는지, class 또는 ID 명이 지정되어 있는지에 따라 가져 올 수 있는 방법이 나누어 진다.
우선은 사이트를 분석하고, HTML 태그를 개발자 도구로 보면서 해당 위치가 어느위치인지 보고 class 명이나 ID명이 지정되어 있다면 해당 명칭으로 BeautifulSoup을 활용하여 접근하면 된다.
만약, class나 id가 없는 태그라면 범위를 좁혀가면서 내가 원하는 정보만 가져올 수 있도록 접근하면 된다.
웹 크롤러 만드는 순서
- 정보를 가져오고자 하는 사이트 HTML 소스 가져오기(requests 이용)
- 정보를 추출하고자 하는 태그 위치 찾기( 태그형태, class명, id명 등)
- BeautifulSoup과 re를 사용하여 정보 가져오기
- 중간중간 print( )로 화면에 출력하면서 정보를 제대로 가져오는지 확인하기
- 만약 출력용이 아니라면 DB와 연동 또는 엑셀로 정보 저장하기
*사실 웹 크롤링은 다양한 예제를 자주 해보는 것이 좋다. 사이트 마다 가져오는 방식이 참 다양하기 때문이다.
경험과 연습이 답인 분야...!
네이버 뉴스 정보 가져오기
이번 네이버 IT관련 뉴스 제목은 class명이 아래와 같이 되어 있어서 접근한 다음 for문을 돌리면서 re 정규표현식을 활용하여 링크 주소와 타이틀 정보를 가져왔다.
한달 전에 봤던 네이버 뉴스와 class명이 달라져서 사이트를 다시 분석해서 크롤러를 만들었다.
(참고로 요즘 자동화 수집 등을 쉽게 할 수 없도록 사이트를 자주 개편하는 경우도 많다고 한다.)
import requests
import re
from bs4 import BeautifulSoup
url="http://news.naver.com/main/main.nhn?mode=LSD&mid=shm&sid1=105"
html=requests.get(url)
bs_html=BeautifulSoup(html.content,"html.parser")
news_list=bs_html.find_all("a",{"class":"cluster_text_headline"})
for n in news_list:
news = re.findall('href="(.+?)">(.+?)</a>',str(n))[0]
title = news[1]
link = news[0].replace("amp;","") #네이버 링크에서 amp;라는 것 때문에 접근이 불가능하여 별도 처리
print(title)
print(link)
(결과값)
'Python > 파이썬 크롤링 예' 카테고리의 다른 글
파이썬 웹 크롤러 : 네이버 이미지 검색 저장 프로그램 (0) | 2019.05.10 |
---|---|
파이썬 웹 크롤러 만들기 : 네이버 웹툰 전체 썸네일(이미지) 저장 (0) | 2019.05.09 |
파이썬 웹 크롤러 만들기 : 기상청 RSS 도시 예보 (0) | 2019.05.09 |
댓글