해결된 질문
작성
·
435
0
# 저는 다음과 같이 구문을 작성했습니다. 상품의 각 그룹이 아니라, 쥐마켓의 베스트 상품 코너를 클릭하면 나오는 첫 페이지(ALL 항목)의 상품들을 크롤링 하려고 했습니다. 해당 페이지의 주소는 'http://corners.gmarket.co.kr/Bestsellers' 였고, 그래서 해당 주소를 입력했습니다. 가격도 받아보고 싶어서 해당 구문을 삽입했고요.
하지만 get_text()에러가 다시 발생했고, 강의 처럼 쥐마켓의 베스트 상품 코너 중 아무 상품 그룹을 클릭해서 크롤링하면 정상적으로 출력이 됨을 확인했습니다. 아래 코드 처럼 작성하면 왜 get_text()에러가 발생하는지(첫 번째 상품은 출력이 되지만 두 번째 상품부터 에러가 발생합니다.), 그리고 어떻게 해결해야 하는지 궁금합니다.
감사합니다!
import requests
from bs4 import BeautifulSoup
res = requests.get('http://corners.gmarket.co.kr/Bestsellers')
soup = BeautifulSoup(res.content, 'html.parser')
titles = soup.select('div.best-list li a.itemname')
for title in titles:
if len(title.get_text()) > 0:
# print(title.get_text(), title['href'])
res_sub = requests.get(title['href'])
soup_sub = BeautifulSoup(res_sub.content, 'html.parser')
price_real = soup_sub.select_one('#itemcase_basic > p > span > strong')
contact_name = soup_sub.select_one('#vip-tab_detail > div.vip-detailarea_productinfo > table:nth-child(3) > tbody > tr:nth-child(4) > td')
contact_num = soup_sub.select_one('#vip-tab_detail > div.vip-detailarea_productinfo > table:nth-child(3) > tbody > tr:nth-child(9) > td')
print(title.get_text(), title['href'], price_real.get_text(), contact_name.get_text(), contact_num.get_text())
답변 2
0
어쩌다보니 제가 비슷한 류의 질문을 두개나 올렸네요. 그래도 친절한 답변/이유 감사합니다. 크롤링이 쉬우면서도 사소한 것 하나라도 어긋나면 에러가 발생하는것 같아요. 감사합니다!
0
안녕하세요. 우선 정말 잘하고 계시다는 이야기드리고 싶어요. 이렇게 여러가지 크롤링을 조금씩 변경해가면서 자기만의 코드를 작성해보는 것은 너무 좋은 일 같아요. 제가 각자 작성하신 각자의 코드를 봐드리려면, 각자가 원하는 크롤링 프로그램을 만들어야 하는 상황이 오기때문에, 시간적으로도, 현실적으로도 조금 무리가 있긴 한데요.
gmarket에서 css selector로 각 상품의 타이틀과 가격을 크롤링할 수 있는 코드를 작성하는 것이 쉽지가 않긴 합니다.
마침 제가 여러 에러끝에 정상적으로 동작하는 코드를 작성했어요. 그래서 다음 코드를 한번 분석하셔서, 어떤 부분이 애매한 부분이었는지, 한번 확인해보시면 좋을 것 같아요.
베스트 사이트를 크롤링한 후, 다음과 같이 크롤링을 하였습니다.
best_item = html.select('div.best-list')
for index, item in enumerate(best_item[1].select('li')):
title = item.select_one('a.itemname').get_text()
ori_price = item.select_one('div.o-price').get_text()
dis_price = item.select_one('div.s-price strong span').get_text()
discount_percent = item.select_one('div.s-price em')
감사합니다.