inflearn logo
강의

講義

知識共有

12時間で終わるPythonを活用したクロール

ネイバーページデータ収集実習

naver 글자 수집 오류 건

28

n03192297081jhle2370

投稿した質問数 1

0


python 웹-크롤링

回答 1

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. 이정훈님.

크롬 Devtools에서 확인한 내용과 BeautifulSoup를 사용한 크롤링 결과가 일치하지 않아 문의하신 내용에 답변 드리겠습니다.

문제 원인

  • 웹사이트 첫 로드 시점에 따라 DOM 구조가 동적으로 변경되는 경우가 있습니다. 네이버와 같은 동적 웹사이트는 JavaScript로 내용이 업데이트되기 때문에, requests 라이브러리를 사용한 단순한 HTTP 요청은 JavaScript에 의해 변경된 콘텐츠를 반영하지 못할 수 있습니다.

해결 방안

  1. Selenium 활용:

    • Selenium은 웹 브라우저를 제어하여 JavaScript가 실행된 후의 최종 DOM을 크롤링할 수 있습니다. Selenium을 이용해서 브라우저를 열고, 페이지가 완전히 로드된 후에 데이터를 수집할 수 있습니다.
    • Selenium을 사용한 웹 크롤링에 대한 예제를 참고하세요.
  2. Web Scraper 사용:

    • selenium, pyppeteer와 같은 툴을 사용하여 JavaScript 렌더링 이후의 HTML을 수집할 수 있습니다. 이러한 도구를 사용하면, 실제 브라우저와 유사한 조작이 가능해 JavaScript로 생성된 태그도 모두 수집할 수 있습니다.
  3. 적절한 User-Agent 설정:

    • 가끔 서버가 스크립트 접근을 차단하기도 합니다. 이 경우 requests 라이브러리에서 User-Agent를 설정하여 웹 브라우저에서 직접 요청하는 것처럼 보이게 할 수 있습니다.

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

0

n03192297081jhle2370

답변 감사합니다. 답변처럼 자바스크립트 렌더링 문제이네요. 섹션3 공부전이라 selenium 활용법을 몰랐습니다.

보내주신 예제 링크 오류 있어서.

제가 방금전 클로드 도움 받아서 실행해본 코드 공유드립니다.

 

image.png

[텍스트]

from selenium import webdriver

from selenium.webdriver.chrome.options import Options

from bs4 import BeautifulSoup

import time

options = Options()

options.add_argument("--headless=new")

options.add_argument("--window-size=1920,1080")

options.add_argument("--lang=ko-KR")

driver = webdriver.Chrome(options=options)

try:

driver.get("https://www.naver.com")

time.sleep(2)

html = driver.page_source # 자바스크립트 실행 완료된 최종 HTML

soup = BeautifulSoup(html, "html.parser")

spans = soup.find_all("span", class_="service_name")

service_names = [span.get_text(strip=True) for span in spans]

print(f"추출된 메뉴 개수: {len(service_names)}")

for name in service_names:

print(name)

finally:

driver.quit()

프롬프트의 영문 버전을 만들 때, 출력 규칙에 포함된 한글 부분은 영어로 번역하지 않고 그대로 유지하면서, 영문 편과 한글 편을 한 번에 함께 출력하려면 어떤 워크플로우로 구성하면 좋을까요?

0

8

0

프로그램은 뭘 사용하시는 건가요??

1

10

2

수업자료와 노션 공유 문제

0

16

3

python run.py 실행시 에러 문제

1

36

3

조건 반복문 질문: for 문 ?

0

24

0

54강 4분 41초에서 질문 있어요.

0

25

1

커서창

1

36

2

강의 제작

1

35

1

23강 질문드립니다, 강사님.

0

24

1

교육자료가 너무 오래되어서 지시한대로 진행하려 해도 안됩니다.

0

41

1

reg.get("http://www.naver.com")

0

75

2

VS로 수강 중인 수강생

0

59

1

네이버 페이지 데이터 수집 실습에서 a.nav가 안되요ㅠ

0

96

1

궁금증

0

107

1

Beautifulsoup실습도중 발생한 문제

0

165

1

selenium 버전이 4.x 대가 되면서 메서드가 달라졌고, 크롬드라이버 다운도 방식이 달라졌습니다(24.09.07 기준)

1

297

1

수업중 따라하기 오류 ㅠㅠ

0

262

2

req.get("http://www.naver.com) 입력후 "Response[200]" 이라고 나오지 않네요 ㅠㅠ

0

202

1

인스타 그램 크롤링 할때

0

951

1

질문

0

331

1

셀레니움 변경사항 입니다.

0

285

0

동영상안에

0

258

0

코스피거래상위종목 수집 강의에서 nth-child 결과 질문입니다

0

655

1

질문이 있습니다.

0

306

1