파이썬 크롤링 관련 질문 드립니다.

조회수 71회
from bs4 import BeautifulSoup
from urllib.request import urlopen

response = urlopen('https://www.naver.com/')
soup = BeautifulSoup(response, 'html.parser')
for anchor in soup.select("span.ah_k"):
    print(anchor)

크롤링 공부중에 있는데 이 구간에서 네이버 실시간 검색어가 크롤링 되어서 나와야 하는데 실행시켜도 아무것도 나오지가 않네요 ㅠㅠ 왜 그런지 해결책좀 알려주시면 감사하겠습니다!

2 답변

  • 최초 수신된 네이버 웹 페이지에는 실시간 검색어 데이터가 존재하지 않습니다. 메인 페이지가 수신된 이후 자바스크립트에 의해 AJAX Call 이 이루어지는데, 그 때 실시간 검색어 데이터가 수신됩니다.

    이러한 동적 데이터를 처리하기 위해서는 일반적으로 다음과 같은 방법이 있습니다.

    1. 자바스크립트를 처리할 수 있는 selenium 을 이용
    2. AJAX Call 을 분석하여 해당 URL에 HTTP 요청을 직접 보내는 방법이 있습니다.

    2번 방식의 간단한 예시입니다.

    Code:

    from urllib.request import urlopen
    import json
    
    
    with urlopen('https://www.naver.com/srchrank') as resp:
        body = resp.read()
    
    data = json.loads(body.decode())
    for each in data['data']:
        print(each)
    

    Output:

    {'rank': 1, 'keyword': '서이숙', 'keyword_synonyms': []}
    {'rank': 2, 'keyword': '차청화', 'keyword_synonyms': []}
    {'rank': 3, 'keyword': '서이숙나이', 'keyword_synonyms': ['차청화 나이']}
    {'rank': 4, 'keyword': '환희', 'keyword_synonyms': []}
    {'rank': 5, 'keyword': '이흑산', 'keyword_synonyms': ['난민복서 이흑산']}
    {'rank': 6, 'keyword': '하도권', 'keyword_synonyms': []}
    {'rank': 7, 'keyword': '허성태', 'keyword_synonyms': []}
    {'rank': 8, 'keyword': '학보사', 'keyword_synonyms': []}
    {'rank': 9, 'keyword': '텔레그램 n번방', 'keyword_synonyms': ['텔레그램', 'n번방', '텔레그램 n번방 청원', 'n번방 사건', '박사방', '엔번방', 'n번방 청원']}
    {'rank': 10, 'keyword': '참 이상한 나라', 'keyword_synonyms': []}
    {'rank': 11, 'keyword': '이재용 아나운서', 'keyword_synonyms': ['이재용']}
    {'rank': 12, 'keyword': '이태원 클라쓰 16회 예고', 'keyword_synonyms': []}
    {'rank': 13, 'keyword': '손현주', 'keyword_synonyms': []}
    {'rank': 14, 'keyword': '텔레그램 탈퇴', 'keyword_synonyms': []}
    {'rank': 15, 'keyword': '왓 위민 원트', 'keyword_synonyms': []}
    {'rank': 16, 'keyword': '신예은', 'keyword_synonyms': []}
    {'rank': 17, 'keyword': '배연정', 'keyword_synonyms': []}
    {'rank': 18, 'keyword': '해피투게더4', 'keyword_synonyms': ['해피투게더']}
    {'rank': 19, 'keyword': '조작된 도시', 'keyword_synonyms': []}
    {'rank': 20, 'keyword': '홍은기', 'keyword_synonyms': []}
    
  • 안녕하세요~ 윗분말씀은 (저 같은) 입문자가 이해하기 어려워서 쉽게 정리하여 작성합니다. 저도 이 걸하다가 안되어서, 개발자 친구에게 물어보니 2020년 1월 16일부터 변경돼서 네이버 실시간데이터만 동적으로 변경되었다고하네요.

    이에 request가 아니라 selenium 을 사용해야해서 상당히 난이도가 올라갔다고합니다.

    참고1 : https://okky.kr/article/671076 참고2: https://khu.goorm.io/qna/5216

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.