• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    미해결

li:nth-of-type 질문

22.06.25 15:20 작성 조회수 165

0

안녕하세요 강의 잘 듣고 있습니다!

제가 질문 올리게 된거는 코드 11번째 줄에 li:nth-of-type(8).string에 관해서인데요

이게 반환값이 계속 none으로 떠서 하나씩 지우면서 확인해보니 html에서 정상적으로 값을 갖고 오고 있는건 맞더라구요

그래서 type(5)로 해서 반환값을 확인해보니 선생님의 코드대로라면 소주가 떠야 하는데 동동주가 반환이 됩니다...!

select_one이 아닌 select나 type이 아니라 li:nth-child로 해도 반환값은 다 동동주이고 find로 하면 반환값이 none이 뜹니다ㅠㅠ

id값으로 접근해서 양주를 출력하는 방법은 알겠는데 전체 리스트의 idx로 접근해서 양주를 어떻게 출력해야 할지 모르겠어요...ㅠㅠ

답변 2

·

답변을 작성해보세요.

2

NamJung Heo님의 프로필

NamJung Heo

2022.06.26

이 질문 글을 올린 분의 친구입니다. 강사분께서는 이 문제에 해결로 새로운 코드를 업로드하셨지만 다른 방법으로 해결법을 제시합니다.
강사분이 강의 영상을 작성했을 시기는 2018년입니다. 2018년 때 당시 bs4 의 버전은 4.6.3입니다.
4.6.3 까지는 강사분의 코드대로 작동했던 것 같으나. 그 이후 나온 라이브러리는 기능이 바뀌었습니다.
현재 수업을 듣는 수강생분들은 다음의 코드를 치면은 bs4 버전을 확인할 수 있을 것입니다.

import bs4
print(bs4.__version__)

아마도 4.11.x / 4.1x.x 버전이 나올 것입니다. 
강사분의 코드처럼 작동하게 만들려면 현재 사용하고 계신 4.11.x 버전을 4.6.3 버전으로 바꾸어줘야 합니다.
다음의 명령어 코드를 아나콘다가 활성화된 콘솔 창에 쳐주세요.

pip install --upgrade beautifulsoup4==4.6.3
혹은
pip3 install --upgrade beautifulsoup4==4.6.3

그러고 나서

import bs4
print(bs4.__version__)

코드를 실행시키면 버전이 4.6.3 으로 나와야 합니다.
그러고 나서 강사분의 코드를 실행하면 강사분의 결과와 똑같은 결과를 확인할 수 있습니다.

 

이제 원인을 말씀드리면... 솔직히 저도 정확한 이유는 모르겠습니다. 추측하건데
1. bs4 라이브러리 제작자들이 실수하여 잘못된 기능을 구현했다.
2. 2018년 이후 CSS 선택자 규칙이 바뀌었다.
아마도 1번의 가능성이 높겠죠. 그량 단순한 실수..

이 문제에 대해서 고민하신 수강생 분들 다들 수고하셨습니다. 특히나 강사분의 파이썬 초급, 중급 강의를 듣고 이 강의까지 듣고 있다면
앞으로 코딩 공부하는데 막히는 것 없이 잘 공부하실 수 있을 것 입니다 :)

[참고] bs4 라이브러리 업데이트 기록
https://pypi.org/project/beautifulsoup4/#history

0

안녕하세요.

위에 Namjungho님 정말 감사드립니다.

최신 버전에 대해서 selector 규칙에 대해서 다시 한 번 확인하겠습니다.

다시 한 번 감사드려요!!