-
TIL.8 웹 크롤링(Python)_네이버 실시간 검색어 가져오기TIL 2020. 10. 16. 23:35728x90
## 웹 크롤링 in Python ##
#### 웹 크롤링(Crawling) 이란 ####
인터넷에 있는 정보 중 원하는 정보만 골라서 자동으로 수집해주는 기능이다
우리가 정보를 가져오려는 사이틀르 가져와
원하느 정보를 찾고
그 정보를 가져오는 코드를 짜면 끝이다.
매우 간단하지만 매우 중요하므로 꼭 알아두자.
동일한 의미로
파싱(Parsing)
스크래핑(Scraping)
스파이더링(spidering)
등이 있다.
import requests
from bs4 import BeautifulSoup
# requests 라는 모듈과 bs4 라 불리는 모듈, html 분석 라이브러리 로 Beautifulsoup함수를 가져온다.
## VS Code로 작업하였으며 requests, bs4 모듈이 없어 동작을 하지 않았다.
## 이때는 터미널 작업창에서 pip install 모듈명 으로 설치하여 사용하도록 하자.
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36'}
### 유저 설정 ###
Embedded 방식 --> AJAX 방식으로 변화
※ Embedded system, 내장형 시스템)은 기계나 기타 제어가 필요한 시스템에 대해, 제어를 위한 특정 기능을 수행하는 컴퓨터 시스템으로 장치 내에 존재하는 전자 시스템이다.
※ Ajax(Asynchronous JavaScript and XML, 에이잭스)는 비동기적인 웹 애플리케이션의 제작을 위해 아래와 같은 조합을 이용하는 웹 개발 기법이다.
https://ko.wikipedia.org/wiki/Ajax
ko.wikipedia.org/wiki/%EC%9E%84%EB%B2%A0%EB%94%94%EB%93%9C_%EC%8B%9C%EC%8A%A4%ED%85%9C
이전과 달리 개인정보보호를 위해 자료를 수집할 경우 서버에서 컴퓨터로 인식 될경우 정보를 주지 않는 ajax 통신으로 변경되었다.
따라서 네이버도 기존 임베딩 방식에서 ajax 통신 방식으로 변경되어 이처럼 유저설정(나 컴퓨터 아니야. 사람..일껄??)이라는 유저 정보를 전달해줘야 자료를 수집할 수 있으며 headers = User-Agent를 넣어줘야한다
User-Agent의 경우 'Mozilla/5.0' 까지만 기입하여도 되는 사이트가 있는 반면 위와같이 전부다 입력해야하는 경우가 있다고 한다.
하기 링크들을 참고하면 좋다.
https://blog.naver.com/kiddwannabe/221185808375
https://namu.wiki/w/%EC%82%AC%EC%9A%A9%EC%9E%90%20%EC%97%90%EC%9D%B4%EC%A0%84%ED%8A%B8
www.inflearn.com/questions/22012
url = 'https://datalab.naver.com/keyword/realtimeList.naver?where=main'
# 네이버 메인이 아닌 DataLab 페이지
res = requests.get(url, headers = headers)
# User 설정
soup = BeautifulSoup(res.content, 'html.parser')
# 불러온 bs4 함수 및 Beautifulsoup 함수 사용
data = soup.select('span.item_title')
# span.item_title 정보를 선택
## 원하는 사이트의 개발자 도구를 열어 내가 원하고자 하는 정보가 어떤 태그안에 들어있는지
또 그 태그 안의 어떤 id, class로 되어있는지 확인하여 선택적으로 원하는 정보만 크롤링 할 수 있다.
for item in data:
print(item.get_text())
## for문을 이용해 실시간 검색어를 표시하는데, 여기서 .get_text() 메서드를 사용해주는것이 좋다.
1번은 .get_text() 메서드를 사용
2번은 메서드 사용 X
기타
## urllib.error.HTTPError: HTTP Error 406: Not Acceptable 이란 error 가 뜨는데,
## 이 406, 403 에러 같은 경우 헤더 값이 없기 떄문이다.
## 예를들어 직접 브라우저를 열고, 크롤링을 하면 header 값이 있는 반면,
## 단순 코드로만 크롤링을 할 경우 header값이 없어 이러한 error가 뜬다.
임베딩 방식 --> AJAX 방식으로 바뀌었기 때문이라 함
코드
더보기import requests
from bs4 import BeautifulSoup
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36'}
url = 'https://datalab.naver.com/keyword/realtimeList.naver?where=main'
res = requests.get(url, headers = headers)
soup = BeautifulSoup(res.content, 'html.parser')
data = soup.select('span.item_title')
# for 문으로 출력해준다.
for item in data:
print(item.get_text())
728x90'TIL' 카테고리의 다른 글
TIL.10 쿠키_세션_캐시 그리고 토큰_2 (0) 2020.10.18 TIL.9 쿠키_ 세션_ 캐시_ 그리고 토큰_1 (0) 2020.10.17 TIL.7 2차원 리스트_2 (0) 2020.10.15 TIL.6 2차원 list(행, 열, 표) (0) 2020.10.14 TIL. 5 list 함수 응용편_3 (0) 2020.10.13