반응형
Beautiful Soup과 Selenium을 실습하기 위하여 네이버 실시간 급상승 검색어 가져오기를 해보겠다.
span태그 class는 "keyword"로 되어있어 이 정보를 바탕으로 soup으로 가져오면 될것 같았다.
import requests
from bs4 import BeautifulSoup
url = "https://www.naver.com"
res = requests.get(url)
soup = BeautifulSoup(res.text, "lxml")
list =[]
naver_lists = soup.find_all("span", attrs={"class" : "keyword"})
for naver_text in naver_lists:
list.append(naver_text.get_text())
print(list)
print(len(list))
왜 못가져오는지 보기위해 html로 열어보았다.
import requests
from bs4 import BeautifulSoup
url = "https://www.naver.com"
res = requests.get(url)
soup = BeautifulSoup(res.text, "lxml")
list =[]
naver_lists = soup.find_all("span", attrs={"class" : "keyword"})
for naver_text in naver_lists:
list.append(naver_text.get_text())
print(list)
print(len(list))
with open("naver.html", "w", encoding="utf8") as f:
f.write(soup.prettify())
택배 파업이라는걸 찾아봤더니 "결과 없음"이 출력되는걸 볼 수있다.
selenium을 써서 좀더 자세히 확인해보기위하여 네이버를 켰더니....
초기 설정값이 필요하다.
이슈별 묶어보기, 이벤트-할인, 시사, 엔터, 스포츠, 나이를 입력해주고 설정완료를 눌러야 검색어를 볼 수있다.
import requests
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
from bs4 import BeautifulSoup
browser = webdriver.Chrome()
browser.get("https://www.naver.com")
time.sleep(0.5)
browser.find_element_by_xpath("//*[@id='NM_RTK_ROLLING_WRAP']/a").click()
time.sleep(0.5)
browser.find_element_by_xpath("//*[@id='NM_RTK_VIEW_filter_wrap']/li[1]/div/a[1]").click()
time.sleep(0.5)
browser.find_element_by_xpath("//*[@id='NM_RTK_VIEW_filter_wrap']/li[2]/div/a[1]").click()
초기값 설정하는 도중 xpath로 가져오는데 //*[@id='NM_RTK_VIEW_filter_wrap']/li[1]/div/a[1] li부분만 5까지 바꿔주면될것같다,
귀찮으니 반복문을 써서 돌리자.
import requests
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
from bs4 import BeautifulSoup
browser = webdriver.Chrome()
browser.get("https://www.naver.com")
time.sleep(0.5)
browser.find_element_by_xpath("//*[@id='NM_RTK_ROLLING_WRAP']/a").click()
for i in range(1,6):
browser.find_element_by_xpath("//*[@id='NM_RTK_VIEW_filter_wrap']/li["+str(i)+"]/div/a[1]").click()
time.sleep(0.5)
browser.find_element_by_xpath("//*[@id='NM_RKT_VIEW_filter_age_wrap']/li[2]/a").click()
browser.find_element_by_xpath("//*[@id='NM_RTK_VIEW_set_btn']").click()
이제 여기서 데이터를 뽑아와야될것같다.
import requests
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
from bs4 import BeautifulSoup
browser = webdriver.Chrome()
browser.get("https://www.naver.com")
time.sleep(0.5)
browser.find_element_by_xpath("//*[@id='NM_RTK_ROLLING_WRAP']/a").click()
for i in range(1,6):
browser.find_element_by_xpath("//*[@id='NM_RTK_VIEW_filter_wrap']/li["+str(i)+"]/div/a[1]").click()
time.sleep(0.5)
browser.find_element_by_xpath("//*[@id='NM_RKT_VIEW_filter_age_wrap']/li[2]/a").click()
browser.find_element_by_xpath("//*[@id='NM_RTK_VIEW_set_btn']").click()
time.sleep(2)
soup = BeautifulSoup(browser.page_source,"lxml")
list =[]
naver_lists = soup.find_all("span", attrs={"class" : "keyword"})
for naver_text in naver_lists:
list.append(naver_text.get_text())
print(list)
잘 파싱하는것을 볼 수 있다.
네이버 실시간검색어 초기값이 미리 설정되어 있어서 삽질좀했다.
반응형
'Python' 카테고리의 다른 글
파이썬으로 웹 크롤링하기 (Selenium 이용) (0) | 2021.01.27 |
---|---|
파이썬으로 웹 크롤링하기 (BeautifulSoup 사용) (0) | 2021.01.27 |
Blind SQL Injection code form (0) | 2021.01.26 |
파이썬 정규식 (RegEx) (0) | 2021.01.17 |
enumerate와 list comprehension (0) | 2021.01.12 |