인프런 커뮤니티 질문&답변

문환룡님의 프로필 이미지
문환룡

작성한 질문수

[2024 리뉴얼] 처음하는 SQL과 데이터베이스(MySQL) 부트캠프 [입문부터 활용까지]

-------------------------------------------------------------------

[실전] 크롤링과 데이터베이스 - 크롤링 코드 작성 시작 강의 6분 58초 내용입니다

작성

·

250

0

[실전] 크롤링과 데이터베이스 - 크롤링 코드 작성 시작

강의 6분 58초 내용입니다

에서 

실행을 할 때 오류없이 카테고리 ALL 내용은 카테고리만 출력을 하고, 그다음 카테고리들 부터는 카테고리와 서브카테고리를 잘 출력을 합니다.

다른 카테고리들(ex패션의류 신발/잡화 등)은 서브카테고리들(브랜드 여성의류 등)이 있어서

sub_categories = soup.select('div.navi.group ul li > a')

통해서 서브카테고리들을 가져올 수 있는데 

ALL (메인)카테고리에서는 서브카테고리에 해당하는 내용이 없어서 크롤링을 할 때 빈값을 가져오고 그러면, 출력을 할 때(sub_category.get_text()을 사용할 때) 빈 값이니까 오류가 나야 하는거 아닌가요?

답변 3

0

[참고] 크롤링과 데이터베이스 - 크롤링 코드 작성 시작 (업데이트) 5분10초 내용입니다

G마켓 내용이 일부 변동되서인지 "sub_categories = soup.select('div.navi.group ul li a')" 부분이 작동되지 않습니다

아직 제가 웹크롤링이 초보라서 해결할 수가 없습니다 ㅠ

 

 

 

 

0

저도 이 질문보고, 한참 고민했네요

ALL 카테고리에는 Sub 카테고리가 없으니, 오류가 나는게

정상 아닌가 하는 질문자님과 같은 생각을했어요

그래서 코드를 실행해보니

---------------------------------------

ALL 카테고리에 대한 선택자값을 print

res = requests.get("http://corners.gmarket.co.kr/Bestsellers")
soup = BeautifulSoup(res.content, "html.parser")

sub_categories = soup.select("div.cate-l > div.navi.group >ul > li a ")
print(sub_categories)

결과값이  "[]"  이와같이 빈리스트 더라구요

---------------------------------------

그냥 추측이건데, 빈리스트도 ,

반복문 (for)문이 가능하고

빈값에 무언가 실행히도 에러가 안나는거 같네요

print(category_link, category_name, sub_category.get_text(), "http://corners.gmarket.co.kr" + sub_category['href'])

위코드가 에러가 나는게 맞지않나 싶었는데

에러가 안나네요

---------------------------------------

실험한 전체코드는 아래와같습니다

import requests
from bs4 import BeautifulSoup

# 카테고리 선택자 : div.gbest-cate > ul.by-group > li a

res = requests.get("http://corners.gmarket.co.kr/Bestsellers")
soup = BeautifulSoup(res.content, "html.parser")

sub_categories = soup.select("div.cate-l > div.navi.group >ul > li a ")
print(sub_categories)

for sub_category in sub_categories:
        print(category_link, category_name, sub_category.get_text(), "http://corners.gmarket.co.kr" + sub_category['href'])
    
    
    

0

안녕하세요.

관련 코드는 get_category() 함수를 호출했을 때, 일어나는 작업이니까요.

get_category() 자체가 ALL 카테고리 이외의 각 메인 카테고리에 대해서만 호출을 하니, 내부에서 각 메인 카테고리에 대한 서브 카테고리 관련 정보를 가져오는데에서는 논리적으로 이슈가 없을 것 같습니다. 그래서 에러가 나지 않는 것으로 이해가 됩니다.

이해가 어려우시다면, 각 코드 사이사이에 print 구문을 넣어서 어떤 경우에 실행이 되는지를 보신다면 좀더 이해하기 쉬우실꺼예요.

문환룡님의 프로필 이미지
문환룡
질문자

vscode를 이용해서 한줄 씩 실행을 해보았는데

처음에  category_name 에 "ALL"이 할당이 되고

get_items(soup,category_name,"All")

문구를 실행한 다음에, 다음 줄인

sub_categories = soup.select('div.navi.group ul li > a')

를 실행하면 sub_categories=[] 이렇게 할당이 되어서 반복문을 실행하지 않고

get_category() 함수를 빠져나온 다음

다음 카테고리인(패션의류)로 넘어가는 것을 확인했습니다!

페이지 소스를 분석한 결과,

category_name 이 'ALL'인 경우에는 div.navi.group ul li > a 경로 자체가 존재하지 않아서 

sub_categories=[] 으로 되는 것 같은데요. 그렇다면

이런 경우에는 sub_categories == None 인 것인가요?

문환룡님의 프로필 이미지
문환룡

작성한 질문수

질문하기