네이버 연관 검색어 수집
- 정적(static) 웹페이지 데이터 수집
- BeautifulSoup을 이용하여 HTML 문자열 데이터 parsing
라이브러리 임포트
import pandas as pd
import requests
from bs4 import BeautifulSoup
1. 웹페이지 분석 : URL
query = "삼성전자"
url = f"https://search.naver.com/search.naver?query={query}"
print(url)
2. request(URL) > response : str(html)
response = requests.get(url)
response
response.text[:250]
3. str(html) > bs object
- html 문자열을 beautifulSoup Object로 변환한다.
dom = BeautifulSoup(response.text, "html.parser")
print(type(dom))
4. bs object > .select(css-selector), .select_one(css-selector) > str(text)
- bs object에서 css-selector를 이용해 원하는 태그안의 내용을 가져온다.
Tag | 선택방법 |
---|
element Tag (<div>, <p>... ) | soup.select('p') |
id값 | #id |
class값 | .class |
attr값 (<p value="no1">, <p value="no2">... ) | p[value="no1"] |
from bs4 import BeautifulSoup
html = '''
<html>
<body>
<div class="container">
<h1 id="test_title">Title</h1>
<span class="test_span">spanspanspan</span>
<p value="no1">Paragraph 1</p>
<p value="no2">Paragraph 2</p>
</div>
</body>
</html>
'''
soup = BeautifulSoup(html, 'html.parser')
paragraphs1 = soup.select('div > p[value="no1"]')
paragraphs2 = soup.select('div > .test_span')
paragraphs3 = soup.select('div > #test_title')
for p in paragraphs1:
print(p.text)
for p in paragraphs2:
print(p.text)
for p in paragraphs3:
print(p.text)
elements = dom.select(".lst_related_srch > .item")
print(len(elements))
element = elements[0]
keyword = element.select_one(".tit").text
print(keyword)
- element의 a태그안의 href 속성값 가져오기
link = element.select_one("a").get("href")
print(link)
keywords = []
for element in elements:
keyword = element.text.strip()
keywords.append(keyword)
print(keywords)
5. str(text) > DataFrame
- 검색어 : query, 연관검색어 : keywords 로 DataFrame 생성
df = pd.DataFrame({"keywors": keywords})
df["query"] = query
df.tail(2)
from datetime import datetime
now = datetime.now()
now = now.strftime("%Y-%m-%d %H:%M")
df["date_time"] = now
display(df.tail(2))
6. 함수화
- query를 입력하면 데이터 프레임을 출력하는 함수
def naver_relate_keyword(query):
url = f"https://search.naver.com/search.naver?query={query}"
response = requests.get(url)
dom = BeautifulSoup(response.text, "html.parser")
elements = dom.select(".lst_related_srch > .item")
keywords = [element.text.strip() for element in elements]
df = pd.DataFrame({"keywors": keywords})
df["query"] = query
now = datetime.now()
now = now.strftime("%Y-%m-%d %H:%M")
df["date_time"] = now
return df
query = "삼성전자"
df = naver_relate_keyword(query)
display(df.tail(2))
keywords | query | data_time |
---|
삼성전자서비스 | 삼성전자 | 2022-07-10 22:06 |
삼성전자 as센터 | 삼성전자 | 2022-07-10 22:06 |
dfs = []
queries = ["삼성전자", "LG전자"]
for query in queries:
print(query, end=" ")
df = naver_relate_keyword(query)
dfs.append(df)
result = pd.concat(dfs, ignore_index=True)
display(result)