작성
·
296
0
선생님 안녕하세요 너무 유익한 강의로 많이 배우고 있습니다. 감사합니다.
10분 20초에 나오는 gmarket 크롤링하는 부분에 대해서 궁금증이 있어 문의드립니다.
선생님 답안을 보기 전에 저는
bestlists=soup.select('div.best-list')
bestitems=bestlists[1]
products=bestitems.select('ul > li')
for index, item in enumerate(products):
title=item.select('a.itemname')
price=item.select('div.s-price > strong')
print(index+1, title.get_text(), price.get_text())
이렇게 for문 안에서 ul>li로 상품하나를 뽑은 상태니까 a태그에 itemname은 하나뿐이기 때문에 select_one 대신에 select를 사용하였는데 get_text()했을때 오류가 뜹니다. 하나뿐이니까 select로 해도 나와야되는게 아닐지..궁금합니다! 너무 좋은 강의 감사합니다.
답변 1
0
안녕하세요. 우선 좋은 강의라고 몇번이나 말씀을 해주시니, ㅎㅎ 정말 ... 힘이 되네요.
저도 이 기능을 처음 익힐 때, 가끔 실수한 이슈인데요.
select() 는 리턴값이 리스트입니다. 그러다보니 예를 들어서, 작성하신 코드처럼
title=item.select('a.itemname')
title.get_text() <--- 이렇게 하게 되면 리스트변수.get_text() 가 되는 것이예요.
get_text() 라는 메서드는 리스트 변수 안에 있는 각 아이템 객체가 가지고 잇는 것이죠
그래서 리스트변수에서 각 아이템을 빼온 후에 get_text() 를 하셔야 하고요. 각 아이템을 빼는 일은 for 문을 사용하시면 됩니다. (기존 영상에서 유사한 패턴을 많이 보여드렸죠). 그래서 예를 들어 다음과 같이 진행하셔야 하고요. 만약에 CSS selector 가 웹페이지와 적절히 매칭이 안된다면, 에러가 날수도 있겠죠. 적절하다면, 출력이 될 것입니다.
title=item.select('a.itemname')
for item in title:
print(item.get_text())
감사합니다.