AIVLE

Web Crwaling ⑤ - 네이버 연관 검색어 수집

민주82 2023. 2. 21. 02:04

지금까지는 동적 웹페이지 데이터를 수집했다면....!

이번에는 정적 웹페이지 데이터를 수집한다

 

 

 

▽ 아직도 차이점을 모른다면 아래 글 필독 

                 

https://mingjuu.tistory.com/14

 

Web Crwaling ① - basic

웹 크롤링을 하기전에 알아야 할 것들 !! (1) Client & Server Client 브라우져를 통해 서버에 데이터를 요청 Server Client가 데이터를 요청하면 요청에 따라 데이터를 전송 (2) Get & Post Get Url에 데이터가 포

mingjuu.tistory.com

 

 

정적 웹페이지에서 데이터를 파싱할 때는  json(str) > list, dict > DataFrame → 이런 절차

하지만 이번 네이버 연관 검색어 수집에서는 BeautifulSoup를 이용하여 HTML 문자열 데이터를 파싱할 것이다 :)

 

 

 

 

⊙ BeautifulSoup

: HTML문서를 파이썬객체로 변환하여 원하는 정보를 가져올 때 사용하는 라이브러리

 

 

import pandas as pd
import requests
from bs4 import BeautifulSoup

 

 

네이버에 '삼성전자' 검색을 했을 때 우측 상단에서 연관 검색어를 확인 할 수 있다

이제 이 데이터를 가져올 것이다

 

 

 

1. 웹페이지 분석 : URL

 

query = '삼성전자' 
url = f'https://search.naver.com/search.naver?query={query}' 
url

 

검색어에 따라 달라질 수 있도록 query변수 지정

 

 

 

 

2. request(URL) > response : str(html)

 

response = requests.get(url) 
response.text[:300]

html

response 확인해보면 html 형식이다

 

 

 

3. str(html) > bs object

 

dom = BeautifulSoup(response.text, 'html.parser')
type(dom)

 

 

 

4. bs object > .select(css-selector), .select_one(css-selector) > str(text)

 

elements = dom.select('#nx_right_related_keywords > div > div.related_srch > ul > li')
len(elements)

개발자도구 - 연관검색어 '삼성전자주가'에 cursor !

 

 

경로

부모에서 자식요소 선택하는 기호

'>'

 

 

element = elements[0]
element.select_one('.tit').text

select_one(css선택자) : css선택자를 이용해서 하나의 요소를 접근

 

실행결과

 

 

 

5. str(text) > DataFrame

 

keywords = [element.select_one('.tit').text for element in elements]

df = pd.DataFrame({
    'keywords' : keywords
})
df['query'] = query
df

감자빵