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
두 사이트를 참고하여 작성하였으며
헤더 값을 체크하기 때문에 일반 브라우저에서 요청하는 것처럼 설정하는 headers를 추가합니다.
실행 결과 :
git : github.com/integerJI/algorithm/blob/master/python/crawling.py
크롤링이 가능한가? : integer-ji.tistory.com/317
'코딩공부 > Python Django' 카테고리의 다른 글
python selenium을 이용한 크롤링 (7) | 2020.09.27 |
---|---|
python schedule 라이브러리 사용하기 (0) | 2020.09.24 |
os.path.isfile 함수를 이용한 secrets.json 관리하기 (1) | 2020.08.31 |
django checkbox 값 넘기기 (0) | 2020.08.30 |
django password reset - PasswordResetView 커스터마이징 (0) | 2020.08.27 |