인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

권윤경님의 프로필 이미지

작성한 질문수

[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)

실전 크롤링과 강력한 크롤링 기술 팁2 (업데이트)

네이버 크롤링에서 결과값이 나오지 않습니다.

작성

·

469

0

import requests

from bs4 import BeautifulSoup

res = requests.get('https://www.naver.com/')

soup = BeautifulSoup(res.content,'html.parser')

mydata = soup.find_all('span',attrs={'class':'ah_k'})

for item in mydata:

    print(item.get_text())

============================

위와같이 실검키워드 크롤링하려는데 결과값이 나오지 않습니다. 어떤것 때문에 그러는지 알려주실수 있을까요?

네이버 안의 <a> 태그로 되어있는 제목은 크롤링 정상적으로 되는거 확인하였습니다.

답변 2

4

잔재미코딩 DaveLee님의 프로필 이미지

안녕하세요. 강좌에서 가능한 실제 크롤링 예제를 보여드리기 위해, 다양한 실제 사이트를 크롤링하는 코드를 설명드렸는데요. 그러다보니, 실제 사이트의 페이지가 변경이 되어, 크롤링 코드가 정상 동작하지 않는 경우가 있을 수 있습니다. 금번에 네이버 실시간 검색어 페이지가 변경되어, 관련하여 공유를 드립니다.

본 강좌의 목적은 특정 실제 사이트를 크롤링하는 것이 아니라, 파이썬 입문과 크롤링 기본 기술을 익히며, 파이썬과 데이터 수집 기술, 그리고 추가로 업무 자동화 기술도 익히시는 것이라서요. 입문자분들도 익힐 수 있는 부분에 집중한 것인데요.

네이버 사이트의 실시간 검색어 크롤링이 너무 많다보니, 네이버측에서 굉장히 크롤링을 어렵게 해놓은 것으로 보입니다. 그래서, 본래 쉬운 크롤링 예제로 낮은 난이도를 가지고 있었는데, 최상급 난이도로 올라간 상황입니다. 이 부분 이해 부탁드리며, 해당 크롤링은 크롤링 기술중 중급 이상의 기술인 selenium 기술과 bs4 기술을 혼합해서 사용해야만 해당 크롤링 연습을 해볼 수 있고 심지어 이를 위해서는 별도 프로그램을 PC에 설치해야만 해서, 참고로만 부탁드립니다.

해당 기술에 대해서는 PC에 관련 프로그램 설치 및 활용에 대해, 부득이 별도 크롤링 중급 강좌인 '현존 최강 크롤링 기술: Scrapy와 Selenium 정복'에서 설명해놓았습니다. 다음 코드는 해당 강좌를 다 수강한 후에야, 비로소 연습이 가능함을 부득이 이해를 부탁드립니다. 감사합니다.


from selenium import webdriver from selenium.common.exceptions import TimeoutException from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By from bs4 import BeautifulSoup

chromedriver = '/Users/jhleeroot/09_Libraries/chromedriver' driver = webdriver.Chrome(chromedriver) driver.get('https://www.naver.com') try: waits = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, 'ah_roll_area'))) page_source = driver.page_source soup = BeautifulSoup(page_source, "html.parser") data = soup.find_all('span', class_='ah_k') for rank, item in enumerate(data): print(str(rank + 1) + '위:', item.get_text())
except TimeoutException: print ("Loading took too much time!")

3

Howoo Jang님의 프로필 이미지

https://www.inflearn.com/questions/21894

위 링크 제 코드 참조