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

김하린님의 프로필 이미지
김하린

작성한 질문수

웹스크래핑 코드 리뷰 도와주세요 (초렙.. '-')

작성

·

416

·

수정됨

0

네이버웹툰 만화 -> 신혼일기 -> 15화 제목을 가져와 보려고 하기와 같이 코드를 작성했습니다만

주피터 노트북에서 run 했을 때 [ ] 라고만 나옵니다 ㅠㅠ 어떻게 해야 할까요??

import requests

from bs4 import BeautifulSoup as bs

url = "https://comic.naver.com/webtoon/list?titleId=812354"

rsp = requests.get(url, verify=False) rsp.raise_for_status()

soup = bs(rsp.text, "lxml")

print(soup.find_all("span", attrs={"class": "EpisodeListList__title--lfIzU"}))

답변 1

0

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

해당 코드를 보면 몇 가지 문제가 있어 보입니다.

  1. from bs4 import BeautifulSoup as bs 부분에서 as bs를 사용하고 계신데, 나중에 BeautifulSoup을 사용할 때 bs 대신 soup로 사용하고 계셔야 합니다. 따라서 as bs 부분을 삭제하고 soup라는 변수명을 사용하시는 것이 좋습니다.

  2. requests.get(url, verify=False)에서 verify=False를 사용하고 계시는데, 이는 SSL 인증을 건너뛰는 것입니다. 대부분의 경우 필요하지 않기 때문에 이 부분을 제거하시는 것이 좋습니다.

  3. print(soup.find_all("span", attrs={"class": "EpisodeListList__title--lfIzU"}))에서는 find_all을 사용하여 span 태그 중 클래스 이름이 EpisodeListList__title--lfIzU인 요소들을 모두 찾는 것입니다. 그러나 해당 요소들은 모두 상위 요소인 div로 감싸져 있습니다. 따라서 div 태그를 추가하고, 그 안에서 span 태그를 찾도록 코드를 수정하셔야 합니다.

수정한 코드는 아래와 같습니다.

import requests
from bs4 import BeautifulSoup as soup

url = "https://comic.naver.com/webtoon/list?titleId=812354"
rsp = requests.get(url)
rsp.raise_for_status()
html = rsp.text

soup = soup(html, "lxml")
episodes = soup.find_all("div", attrs={"class": "col_inner"})[0].find_all("span", attrs={"class": "title"})

for episode in episodes:
    print(episode.text)

위의 코드는 네이버 웹툰의 신혼일기 중 제목(class=“title”)을 가져와 출력하는 코드입니다. 코드를 실행하면 해당되는 제목들이 출력될 것입니다.

참고로, 코드 실행 결과가 []로 나오는 경우에는 해당 요소들을 찾지 못한 것입니다. 그 경우에는 요소의 선택자나 클래스 이름 등을 확인해보시고, 코드를 적절히 수정하셔야 합니다.

기능에 대한 추가적인 도움이 필요하신 경우, 더 상세한 질문을 주시면 더 많은 도움을 드릴 수 있을 것입니다. 감사합니다.

김하린님의 프로필 이미지
김하린

작성한 질문수

질문하기