• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    미해결

강사님 html 이 업데이트 되어서 오류가 난거 같습니다..!

24.03.10 16:02 작성 조회수 163

0

안녕하세요 ! 최근 데이터크롤링에 대해 수업을 끊고 공부를 시작한지 얼마 안된 학생입니다 !

평소 궁금했던 내용들을 배우니 참 재미가 있네요 ..!

 

다름이 아니라 "뉴스 본문 내용 크롤링하는 법" 강의 들으면서 오류가 자주 나는것을 보니 네이버 html 이 업데이트 된거 같습니다.

저 스스로 오류를 해결해보려고 해도 잘 안되어서 답답한 마음에 이렇게 글을 씁니다.

 

import requests
from bs4 import BeautifulSoup

response = requests.get("https://search.naver.com/search.naver?ssc=tab.news.all&where=news&sm=tab_jum&query=%EC%82%BC%EC%84%B1%EC%A0%84%EC%9E%90")
html = response.text
soup = BeautifulSoup(html, 'html.parser')
articles = soup.select("div.info_group") # 뉴스 기사 div 10개 추출
for article in articles :
    links = article.select("a.info") # 리스
    if len(links) >= 2: # 링크가 2개 이상이면
        url = links[1].attrs['href'] # 두번째 링크의 href를 추출
        # print(url)
        response = requests.get(url, headers={'User-agent':'Mozila/5.0'})
        html = response.text
        soup = BeautifulSoup(html, 'html.parser')
        # print(soup)
        content = soup.select_one('#articleBodyContents')
        print(content.text)

위 코드를 강사님이 알려주신 코드 입니다.

 

혹시 뉴스 본문 내용 크롤링하려면 어떻게 해야 될지 알려주실 수 있나요?

답변 2

·

답변을 작성해보세요.

0

안녕하세요.

스스로 오류를 해결하려고 했는데 잘안되서 답답하셨군요.

 

괜찮습니다.

저는 더 심했으니깐요.

 

코딩은 그러한 과정을 많이 겪을 수록 실력이 성장합니다.

(사실 세상 모든일이 그렇죠 ㅎㅎ)

 

HTML 종종 바뀔 수 있습니다.

강의예제 사이트 뿐만 아니라 본인이 원하는 사이트도 언제든 업데이트가 될수 있죠.

그래서 선택자를 스스로 만들어 낼 수 있는 능력이 정말 중요합니다.

 

뉴스 본문을 가져오기 위해서는 선택자를 정말 다양하게 만들 수 있지만

가장 쉬운 2가지를 뽑으면 다음과 같습니다.

 

#newsct_article

#dic_area

 

import requests
from bs4 import BeautifulSoup

response = requests.get("https://search.naver.com/search.naver?ssc=tab.news.all&where=news&sm=tab_jum&query=%EC%82%BC%EC%84%B1%EC%A0%84%EC%9E%90")
html = response.text
soup = BeautifulSoup(html, 'html.parser')
articles = soup.select("div.info_group") # 뉴스 기사 div 10개 추출
for article in articles :
    links = article.select("a.info") # 리스
    if len(links) >= 2: # 링크가 2개 이상이면
        url = links[1].attrs['href'] # 두번째 링크의 href를 추출
        print(url)
        response = requests.get(url, headers={'User-agent':'Mozila/5.0'})
        html = response.text
        soup = BeautifulSoup(html, 'html.parser')
        # print(soup)
        content = soup.select_one('#dic_area')
        print(content.text)

 

잘하실 수 있습니다!

끝까지 화이팅!

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.03.10

안녕하세요, 인프런 AI 인턴입니다.

최연우님, 네이버 뉴스 본문 크롤링에 어려움을 겪고 계신 것 같습니다. 웹 크롤링은 웹사이트의 HTML 구조가 바뀌면 코드를 수정해야 하는 경우가 발생합니다. 제공해주신 정보를 토대로 유사한 질문 내역을 찾아보았고, 아래의 답변이 도움이 될 수 있을 것 같습니다.

  • “네이버 뉴스 본문 링크 질문”
    이 질문에서는 사용자가 크롤링하는 과정에서 특정 a 태그의 class를 선택할 때 단어 하나만을 사용하면 되는지에 대한 내용이 담겨 있습니다. 스타트코딩 강사님께서는 “태그에 class가 두 개 이상인 경우 띄어쓰기로 구분해서 작성하고, CSS 선택자를 만들 때 원하는 태그를 한 개의 class로 선택할 수 있으면 한 개만 써도 되고, 더 세부적으로 선택해야 할 경우 여러 개를 쓸 수 있다”고 설명하고 계십니다.

위 링크에서 제공된 답변은 직접적으로 현재의 문제를 해결하기는 하지 않지만, 웹 크롤링시 CSS 선택자를 사용하는 방법에 대한 이해를 돕는 내용입니다. 또한, 현재 네이버 뉴스의 HTML 구조에 변화가 있어 본문 크롤링에 문제가 발생했을 가능성을 감안하면, 강사님의 가이드를 참고하여 현재 페이지의 새로운 HTML 구조를 분석하고, 적절한 CSS 선택자를 사용해야 할 필요가 있습니다.

현재 페이지 소스를 보고, 개발자 도구(F12)를 활용해서 본문 내용을 감싸고 있는 태그와 클래스명을 확인해 보시기 바랍니다. 클래스명이 변경되었다면, 해당 클래스명으로 갱신하셔야 합니다. 만약 soup.select_one('#articleBodyContents')에 해당하는 id나 class가 없다면, 개발자 도구를 이용하여 본문을 실제 포함하는 새로운 id나 클래스명을 찾아 업데이트 하시면 됩니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.