-
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
Ajax - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 다른 뜻에 대해서는 에이젝스 문서를 참조하십시오. 다른 뜻에 대해서는 아이아스 문서를 참조하십시오. Ajax(Asynchronous JavaScript and XML, 에이잭스)는 비동기적인
ko.wikipedia.org
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
임베디드 시스템 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 임베디드 시스템(영어: embedded system, 내장형 시스템)은 기계나 기타 제어가 필요한 시스템에 대해, 제어를 위한 특정 기능을 수행하는 컴퓨터 시스템으로 장치 �
ko.wikipedia.org
이전과 달리 개인정보보호를 위해 자료를 수집할 경우 서버에서 컴퓨터로 인식 될경우 정보를 주지 않는 ajax 통신으로 변경되었다.
따라서 네이버도 기존 임베딩 방식에서 ajax 통신 방식으로 변경되어 이처럼 유저설정(나 컴퓨터 아니야. 사람..일껄??)이라는 유저 정보를 전달해줘야 자료를 수집할 수 있으며 headers = User-Agent를 넣어줘야한다
User-Agent의 경우 'Mozilla/5.0' 까지만 기입하여도 되는 사이트가 있는 반면 위와같이 전부다 입력해야하는 경우가 있다고 한다.
하기 링크들을 참고하면 좋다.
https://blog.naver.com/kiddwannabe/221185808375
크롤링) 접속 차단되었을때 User-Agent지정(header)
User-Agent 자동 입력 및 자동 변경에 대해 살펴보실 분들은 아래 글을 봐주세요 (2020.08.27)뭐야? 너...
blog.naver.com
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
사용자 에이전트 - 나무위키
아래에 샘플을 준비했다. Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 윈도우 NT 10버전 64비트의 Gecko 같은 브라우저 레이아웃 엔진인 KHTML을 사용하는 �
namu.wiki
www.inflearn.com/questions/22012
네이버 검색 순위 크롤링 관련 - 인프런
질문 - 네이버 검색 순위 크롤링 관련 lists의 사이즈가 0입니다. 제가 혹시 간과한 부분이 있는지 여쭙습니다. 참고로 status code는 200, bs 변수에도 정상적으로 값이 할당되는듯합니다. 감사합니다.
www.inflearn.com
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