코딩공부/Python Django

python으로 크롤링(crawling) 하기

integerJI 2020. 9. 22. 22:50

python으로 크롤링(crawling) 하기

 

크롤링이란 HTML에서 원하는 정보를 원하는 형식으로 가공하여 가져오는 것을 말합니다. 

 

python으로 크롤링을 하는 이유는 python의 라이브러리를 통하여 쉽고 간단하게 데이터를 가져올 수 있기 때문에 선택하였습니다.

 

하지만 news.bizwatch.co.kr/article/mobile/2017/09/27/0023 해당 기사를 확인해 보면 크롤링은 불법이라고 판단된다고 합니다. 

 

해당 게시글은 학습 목적으로 사용했으며 상업적 이용은 법적 처벌을 받을수 있습니다.

 

1. py파일 준비

 

vscode를 사용하여 적당한 폴더에 touch 명령어를 통해 crawling.py 파일을 생성하여 줍니다.

 

 

2. 크롤링을 위한 pip 설치

# pip install bs4
# pip install requests

 

두 개의 라이브러리를 설치하여 줍니다.

 

bs4 : Beautifulsoup를 사용하기 위하여 bs4 모듈을 설치합니다.

 

Beautifulsoup는 HTML과 XML 문서를 파씽하기 위한 파이썬 패키지입니다. 위키백과

 

requests : 크롤링을 하기 위해 웹 사이트에 http 요청을 하기 위해 사용되는 모듈입니다. 위키백과

 

3. 크롤링

# pip install bs4
# pip install requests

import requests
from bs4 import BeautifulSoup

print('시작')

source = requests.get('https://www.naver.com/').text
soup = BeautifulSoup(source, 'html.parser')

print(soup) 

 

line 9 : requests.get를 사용하여 'https://www.naver.com/'의 웹페이지를 BeautifulSoup 객체로 반환합니다.

 

여기서 BeautifulSoup 객체는 웹 문서를 파싱한 상태입니다.

 

"파싱이란 문자열로 구성된 문서를 토큰으로 분해하고 토큰으로 구성된 파스 트리를 만드는 것"

 

참고 블로그 : webnautes.tistory.com/779

 

실행 결과 :

웹페이지의 모든 문자열을 가져옵니다.

 

 

3-1. head.title 가져오기

# pip install bs4
# pip install requests

import requests
from bs4 import BeautifulSoup

print('시작')

source = requests.get('https://www.naver.com/').text
soup = BeautifulSoup(source, 'html.parser')

print(soup.head.title) 

 

파싱된 soup의 head, 그 밑의 title를 입력합니다.

 

모든 html의 기본 구조입니다.

 

실행 결과 : 

 

 

3-2. 원하는 정보 가져오기

이번에 가져올 정보는 "네이버 검색어"입니다.

 

해당 데이터는 네이버에서 제공해주고 있으며 상업적 이용으로 사용하지 않습니다.

 

 

 

현재 네이버의 실시간 검색어는 동적으로 변하기 때문에

 

크롤링을 하여 가져올 수 없습니다.

 

그렇기 때문에 실시간 검색어 하단의 DataLab. 을 눌러 네이버 데이터 사이트로 이동해 줍니다.

 

 

또 하나 더 

 

네이버 검색어가 한동안 광고로 도배가 되었을 때 개편이 있었죠

 

그렇기 때문에 정확한 정보를 위해 "상세 옵션", "집계 주기", "연령"을 설정해줍니다.

 

URL을 보면 Parameter 값이 들어가 있는 모습이 보입니다.

 

import requests
from bs4 import BeautifulSoup

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
url = 'https://datalab.naver.com/keyword/realtimeList.naver?age=all&datetime=2020-09-22T22%3A00%3A00&entertainment=2&groupingLevel=4&marketing=2&news=2&sports=2'
res = requests.get(url, headers = headers)
soup = BeautifulSoup(res.content, 'html.parser')
data = soup.findAll('span','item_title')

index = 0

for item in data:
    index += 1
    print(str(index) + " - " + item.get_text())

 

www.inflearn.com/questions/21894

 

실전 크롤링과 강력한 크롤링 기술 팁2: 네이버 사이트 크롤링 강의중 질문이 있습니다. - 인프런

질문 - 실전 크롤링과 강력한 크롤링 기술 팁2: 네이버 사이트 크롤링 강의중 질문이 있습니다. 네이버 사이트 급상승 검색어 키워드를 하던중 수업의 내용을 따라 코드를 작성해 보니... 아무런

www.inflearn.com

jaeho0613.tistory.com/112

 

[Python Crawling] - 네이버 실검 크롤링 #1

현재 네이버 실시간 검색어 크롤링 방법이 달라졌다. 유튜브, 블로그 등에 많은 예제가 있지만 현재는 네이버 실시간 검색어가 동적으로 정보를 받게 바뀌어서 기존 예제들로 실시간 검색어를 �

jaeho0613.tistory.com

두 사이트를 참고하여 작성하였으며

 

헤더 값을 체크하기 때문에 일반 브라우저에서 요청하는 것처럼 설정하는 headers를 추가합니다.

 

실행 결과 : 

 

 

git : github.com/integerJI/algorithm/blob/master/python/crawling.py

 

크롤링이 가능한가?  : integer-ji.tistory.com/317