작성
·
1.1K
·
수정됨
0
잔재미코딩 선생님 우선 강의 정말 잘 듣고 있습니다.
감사합니다. ^^
크롤링 프로그램 완성: 크롤링한 데이터에서 다시 크롤링하기1 (업데이트)에서 질문드립니다.
수업자료에 올려주신 select로 태그를 가져오는 과정에서
지마켓 bestitems는 왜 one으로만 작동하는 건지 궁금합니다.
강의 찍어주시던 시기에는 bestitems 클래스가 2개가 있어서 select_one이 아닌 select를 사용하셨거든요.
이렇게 넣으면 왜 오류가 나는지 궁금해서 글을 남깁니다.
인터넷에 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() 등의 메서드를 쓸 수 있거든요. 그래서 위의 경우 에러가 난 것이라고 보시면 좋을 것 같습니다. 위 두 함수는 이전 강의에서 설명드린 적이 있기도 해요. 어쨌든 다음 링크도 코드 이해하시는데 도움이 되실 것 같아서, 남겨드립니다.
감사합니다.
친절한 답변 감사합니다. ^^