• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    미해결

쇼핑몰 크롤링 select, select_one 차이

23.01.25 23:15 작성 23.01.25 23:37 수정 조회수 745

0

잔재미코딩 선생님 우선 강의 정말 잘 듣고 있습니다.

감사합니다. ^^

 

크롤링 프로그램 완성: 크롤링한 데이터에서 다시 크롤링하기1 (업데이트)에서 질문드립니다.

 

Screenshot_2.png수업자료에 올려주신 select로 태그를 가져오는 과정에서

지마켓 bestitems는 왜 one으로만 작동하는 건지 궁금합니다.

강의 찍어주시던 시기에는 bestitems 클래스가 2개가 있어서 select_one이 아닌 select를 사용하셨거든요.

 

Screenshot_3.png

이렇게 넣으면 왜 오류가 나는지 궁금해서 글을 남깁니다.

 

인터넷에 select와 select_one의 차이에 대해 찾아 봤으나 답을 얻지는 못해 문의드리게 되었습니다.

 

소중한 강의로 코딩을 알아가게 해주신 점 다시 한번 감사드립니다. ^^

 

#해당 코드

import requests

from bs4 import BeautifulSoup

res = requests.get('http://corners.gmarket.co.kr/Bestsellers?viewType=G&groupCode=G06')

soup = BeautifulSoup(res.content, 'html.parser')

# 2022.09.13 수정사항 (웹사이트 코드가 수시로 변경되면서, best-list class 를 가진 태그가 하나이기 때문에 해당 태그만 선택하도록 수정)

bestitems = soup.select('div.best-list') # select_one() 은 해당 조건에 맞는 태그 하나만 선택하는 함수

products = bestitems.select('ul > li')

for index, product in enumerate(products):

title = product.select_one('a.itemname')

price = product.select_one('div.s-price > strong')

print (title.get_text(), price.get_text(), title['href'])

 

#문의 내용

bestitems = soup.select('div.best-list')

^찾는 값이 1개인 경우에는 무조건 one을 적어야 하는 것일까요?

답변 1

답변을 작성해보세요.

1

안녕하세요. 답변 도우미입니다.

select() 함수는 리턴값의 타입이 리스트 이고요. select_one() 은 리턴값이 전체 웹페이지에서 CSS Selector 에 매칭되는 가장 첫번째 객체입니다. 그러다보니까, 리스트 변수라면, 해당 객체를 리스트에서 꺼내온 후에, 해당 객체.select() 등의 메서드를 쓸 수 있거든요. 그래서 위의 경우 에러가 난 것이라고 보시면 좋을 것 같습니다. 위 두 함수는 이전 강의에서 설명드린 적이 있기도 해요. 어쨌든 다음 링크도 코드 이해하시는데 도움이 되실 것 같아서, 남겨드립니다.

https://pycoding.tistory.com/entry/python-%ED%81%AC%EB%A1%A4%EB%A7%81-select-selectone-%EC%B0%A8%EC%9D%B4

감사합니다.

케이브님의 프로필

케이브

질문자

2023.01.26

친절한 답변 감사합니다. ^^