일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 실검
- RDB
- api설계
- 스트리밍서버
- DB 설계
- AWS
- 라이브커머스
- Gradle
- 스프링
- wooza
- 이커머스 api
- cmi
- API
- 자바
- 멀티쓰레드
- db 스키마
- 서버구축
- restful
- 이커머스
- JPA
- autowired
- Spring
- 미디어서버
- 네이버
- SpringBoot
- REST API
- mariaDB
- 인턴생활
- async
- @async
Archives
- Today
- Total
Polymor!
네이버 실검 순위 크롤링 안되는 이유 본문
[크롤링 기초]
구글에 크롤링 검색하면 타겟팅으로 네이버 실검 순위가 많이 나오길래 해보았다.
크롬같은 경우 개발자도구를 제공해주니 오른쪽 상단 설정-> 더보기 -> 개발자도구를 클릭하면 아래와 같이 html소스가 나온다.
일단 python interpreter에서 beautifulsoup4를 install한다. 이때 4가 아마 3.7 버전 호환되는 거라 그랬던 것같다.
아래 코드와 같이 간단하게 작성하면 span.keyword 클래스의 text가 출력이 되어야한다.
import requests
from bs4 import BeautifulSoup
source = requests.get("https://www.naver.com").text
soup = BeautifulSoup(source, "html.parser")
hotKeys = soup.select('span.keyword')
print(hotKeys)
그런데 빈 값이 리턴되었다. 구글링의 글과 똑같이 작성했는데 왜 그랬던걸까?
결론부터 말하자면, html코드가 당시 글 2018년도와 현재 2020년도가 달라졌고 , 내가 놓치고 있던 크롤링의 기본 원리때문이였다.
크롤링 기법은 단순 HTML코드를 긁어오는 것이지, 자바 스크립트를 처리하는건 브라우저나 가능한 일이며 크롤링에선 불가하다.
requests.get()은 html코드만을 받아온다. 그리고 2018년도의 실시간검색어 데이터는 html코드안에 아래 그림과 같이 list에 데이터가 구조화 되어 있는 것을 확인 할 수 있다. 그런데 지금은 그 데이터들이 Naver DataLab이라는 페이지에 따로 분리가 되어 저장되있으며, naver.com html 소스코드 안에서 이 datalab을 참조하여 데이터를 받아다 띄우는 식으로 구조가 바뀌었다.
그래서 datalab 소스로 크롤링을 해보니 아래와 같이 정상적으로 결과가 반환이 되었다.
'Web' 카테고리의 다른 글
[e-commerce] 개발 동기와 그 여정들 (0) | 2021.02.06 |
---|---|
wowza 스트리밍 서버 구축하기 (0) | 2020.11.30 |
[네트워크] 비동기와 동기 그리고 멀티 쓰레드에 관한 이야기. (0) | 2020.07.28 |
Tiktok 스트리밍 서비스 앱 (0) | 2020.06.07 |
스트리밍 프로토콜 이해하기(feat.네이버 V라이브) (0) | 2020.05.30 |
Comments