• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 엔지니어링

  • 해결 여부

    미해결

scrapy 관련...

20.10.03 23:57 작성 조회수 118

0

안녕하십니까, 선생님이 주신 코드로 한것과

제 코드로 한것 모두 동일한 문제가 있어서 문의드립니다.

scrapy 최종에서,  1st category crawling과 2st category crawling 모두를 실행을 했을때,

1st 만 출력이 되고, 2st는 출력이 안되는 문제가 있습니다.

연결고리상에 끊어진 점이 있나 찾아보았는데 없더라구요..

또한 1st 내용을 지우고, 2st만 출력을 했을때는 정상적으로 출력이 되었습니다.

즉, def parse_mainpage(self, response): 안의

두 for문 중에서 첫번쨰 for문만 작동하는 듯합니다.

여기에 대해서 피드백 주시면 감사하겠습니다.

--- 출력 결과값(터미널)---

(base) PS C:\Users\amore\ecommerce> scrapy crawl gmarket_category_all -o gmarket.csv -t csv                             c:\anaconda3\lib\site-packages\scrapy\commands\__init__.py:129: ScrapyDeprecationWarning: The -t command line option is deprecated in favor of specifying the output format within the -o option, please check the -o option docs for more details

  feeds = feed_process_params_from_cli(self.settings, opts.output, opts.output_format)

c:\anaconda3\lib\site-packages\scrapy\spiderloader.py:40: UserWarning: There are several spiders with the same name:

 

  GmarketCategoryAllSpider named 'gmarket_category_all' (in ecommerce.spiders.gamrket_category_all)

 

  GmarketCategoryAllSpider named 'gmarket_category_all' (in ecommerce.spiders.gmarket_category_all)

 

  This can cause unexpected behavior.

  category=UserWarning,

parse_mainpages

parse_maincategory 컴퓨터/전자 ALL

parse_maincategory 생활/주방/건강 ALL

parse_maincategory 식품 ALL

parse_maincategory e쿠폰/티켓 ALL

parse_maincategory 여행 ALL

parse_maincategory 스포츠/자동차 ALL

parse_maincategory 가구/침구 ALL

parse_maincategory 유아동/출산 ALL

parse_maincategory 화장품/헤어 ALL

parse_maincategory 도서/음반 ALL

parse_maincategory 신발/잡화 ALL

parse_maincategory 패션의류 ALL

(base) PS C:\Users\amore\ecommerce>         

--- 전문코드--

# -*- coding: utf-8 -*-
import scrapy
from ecommerce.items import EcommerceItem

class GmarketCategoryAllSpider(scrapy.Spider):
    name = 'gmarket_category_all'

    def start_requests(self):
        yield scrapy.Request(url='http://corners.gmarket.co.kr/Bestsellers'callback=self.parse_mainpages)

    def parse_mainpages(selfresponse):
        print("parse_mainpages")
        category_links = response.css('div.gbest-cate ul.by-group li a::attr(href)').getall()
        category_names = response.css('div.gbest-cate ul.by-group li a::text').getall()

        # 1st category crawling
        for index, category_link in enumerate(category_links):
            yield scrapy.Request(url='http://corners.gmarket.co.kr' + category_link, callback=self.parse_items, meta={'main_category_name':category_names[index], 'sub_category_name''ALL' })
        # 2nd category crawling
        for index, category_link in enumerate(category_links):
            yield scrapy.Request(url='http://corners.gmarket.co.kr' + category_link, callback=self.parse_subcategory, meta={'main_category_name':category_names[index] })


    def parse_subcategory(selfresponse):
        print ("parse_subcategory", response.meta['main_category_name'])
        subcategory_links = response.css('div.navi.group > ul > li > a::attr(href)').getall()
        sub_category_names = response.css('div.navi.group > ul > li > a::text').getall()
        for index, subcategory_link in enumerate(subcategory_links):
            yield scrapy.Request(url='http://corners.gmarket.co.kr' + subcategory_link, callback=self.parse_items, meta={'main_category_name':response.meta['main_category_name'], 'sub_category_name':sub_category_names[index] })


    def parse_items(selfresponse):
        print ("parse_maincategory", response.meta['main_category_name'], response.meta['sub_category_name'])

        best_items = response.css('div.best-list')
        for index, item in enumerate(best_items[1].css('li')):
            doc = EcommerceItem()
            ranking = index + 1
            title = item.css('a.itemname::text').get()
            ori_price = item.css('div.o-price::text').get()
            dis_price = item.css('div.s-price strong span span::text').get()
            discount_percent = item.css('div.s-price em::text').get()

            if ori_price == None:
                ori_price = dis_price
            ori_price = ori_price.replace(",""").replace("""")
            dis_price = dis_price.replace(",""").replace("""")
            if discount_percent == None:
                discount_percent = '0'
            else:
                discount_percent = discount_percent.replace("%""")

            doc['main_category_name'= response.meta['main_category_name']
            doc['sub_category_name'= response.meta['sub_category_name']
            doc['ranking'= ranking
            doc['title'= title
            doc['ori_price'= ori_price
            doc['dis_price'= dis_price
            doc['discount_percent'= discount_percent
            #print (ranking, title, ori_price, dis_price, discount_percent)
            yield doc

강의와 관련있는 질문을 남겨주세요.
• 강의와 관련이 없는 질문은 지식공유자가 답변하지 않을 수 있습니다. (사적 상담, 컨설팅, 과제 풀이 등)
• 질문을 남기기 전, 비슷한 내용을 질문한 수강생이 있는지 먼저 검색을 해주세요. (중복 질문을 자제해주세요.)
서비스 운영 관련 질문은 인프런 우측 하단 ‘문의하기’를 이용해주세요. (영상 재생 문제, 사이트 버그, 강의 환불 등)

질문 전달에도 요령이 필요합니다.
• 지식공유자가 질문을 좀 더 쉽게 확인할 수 있게 도와주세요.
• 강의실 페이지(/lecture) 에서 '질문하기'를 이용해주시면 질문과 연관된 수업 영상 제목이 함께 등록됩니다.
• 강의 대시보드에서 질문을 남길 경우, 관련 섹션 및 수업 제목을 기재해주세요. 
• 수업 특정 구간에 대한 질문은 꼭 영상 타임코드를 남겨주세요!

구체적인 질문일수록 명확한 답을 받을 수 있어요.
• 질문 제목은 핵심 키워드를 포함해 간결하게 적어주세요.
• 질문 내용은 자세하게 적어주시되, 지식공유자가 답변할 수 있도록 구체적으로 남겨주세요.
• 정확한 질문 내용과 함께 코드를 적어주시거나, 캡쳐 이미지를 첨부하면 더욱 좋습니다.

기본적인 예의를 지켜주세요.
• 정중한 의견 및 문의 제시, 감사 인사 등의 커뮤니케이션은 더 나은 강의를 위한 기틀이 됩니다. 
• 질문이 있을 때에는 강의를 만든 지식공유자에 대한 기본적인 예의를 꼭 지켜주세요. 
반말, 욕설, 과격한 표현 등 지식공유자를 불쾌하게 할 수 있는 내용은 스팸 처리 등 제재를 가할 수 있습니다. 

답변 1

답변을 작성해보세요.

0

안녕하세요.

코드가 많이 복잡해서, 우선 첨부드린 코드에 대해 실제 크롤링된 상품 타이틀과 가격 부분 출력부분만 주석처리하고, 바로 실행해봤는데요. 다음과 같이 전체 ALL, 과 각 카테고리별 ALL, 그리고 각 카테고리의 2차 카테고리까지 크롤링이 되는 것으로 확인이 됩니다. 또 전체 크롤링 결과를 다음과 같은 csv 파일로 출력했을 때, 각 카테고리/서브카테고리별 상품들이 모두 들어 있는 것을 확인하였습니다. 

scrapy crawl gmarket_category_all -o gmarket.csv

지금 보여주신 코드가 제가 첨부한 코드와 달라서, 혹시 첨부한 코드에 일부만 덮어씌워서 테스트가 된 것인지, 아예 첨부한 코드를 새로운 폴더에 넣고 테스트를 해보시면 어떨까요?

또다른 이슈가 있다면, 새로운 질문으로 이야기해주시면 감사하겠습니다. (댓글은 확인이 안되서요)

감사합니다.

parse_mainpages

parse_subcategory 가구/침구

parse_subcategory 컴퓨터/전자

parse_subcategory 생활/주방/건강

parse_maincategory ALL ALL

parse_subcategory 여행

parse_subcategory e쿠폰/티켓

parse_subcategory 도서/음반

parse_subcategory 스포츠/자동차

parse_subcategory 식품

parse_subcategory 유아동/출산

parse_subcategory 패션의류

parse_subcategory 화장품/헤어

parse_subcategory 신발/잡화

parse_maincategory e쿠폰/티켓 ALL

parse_subcategory ALL

parse_maincategory 가구/침구 ALL

parse_maincategory 도서/음반 ALL

parse_maincategory 스포츠/자동차 ALL

parse_maincategory 컴퓨터/전자 ALL

parse_maincategory 식품 ALL

parse_maincategory 생활/주방/건강 ALL

parse_maincategory 여행 ALL

parse_maincategory 유아동/출산 ALL

parse_maincategory 화장품/헤어 ALL

parse_maincategory 패션의류 ALL

parse_maincategory 신발/잡화 ALL

parse_maincategory 가구/침구 가구

parse_maincategory 도서/음반 시/소설

parse_maincategory 유아동/출산 기저귀

parse_maincategory 신발/잡화 브랜드 신발/가방

parse_maincategory 식품 과일/견과

parse_maincategory 화장품/헤어 화장품

parse_maincategory 스포츠/자동차 스포츠의류/운동화

parse_maincategory 패션의류 브랜드 여성의류

parse_maincategory 도서/음반 경제/경영/개발

parse_maincategory e쿠폰/티켓 모바일 상품권

parse_maincategory e쿠폰/티켓 상품권

parse_maincategory e쿠폰/티켓 생활쿠폰

parse_maincategory e쿠폰/티켓 온라인컨텐츠

parse_maincategory 여행 G9 해외패키지

parse_maincategory 여행 여행소품

parse_maincategory 여행 해외여행

parse_maincategory 생활/주방/건강 렌탈 서비스

parse_maincategory 신발/잡화 여행가방

parse_maincategory 신발/잡화 수입명품

parse_maincategory 신발/잡화 잡화/액세서리

parse_maincategory 신발/잡화 가방/지갑

parse_maincategory 신발/잡화 여성신발

parse_maincategory 신발/잡화 브랜드 쥬얼리/시계

parse_maincategory 신발/잡화 운동화

parse_maincategory 신발/잡화 남성신발

parse_maincategory 화장품/헤어 제모/데오드란트/슬리밍

parse_maincategory 화장품/헤어 샴푸/헤어에센스/스타일링

parse_maincategory 화장품/헤어 바디클렌져/바디로션

parse_maincategory 화장품/헤어 화장소품

parse_maincategory 화장품/헤어 보습제품

parse_maincategory 패션의류 언더웨어

parse_maincategory 화장품/헤어 향수

parse_maincategory 화장품/헤어 남성화장품

parse_maincategory 패션의류 남성의류

parse_maincategory 패션의류 여성의류

parse_maincategory 패션의류 브랜드 진/캐쥬얼

parse_maincategory 패션의류 브랜드 남성의류

parse_maincategory 유아동/출산 홈플러스 베이비

parse_maincategory 유아동/출산 임부복/용품

parse_maincategory 유아동/출산 장난감/완구

parse_maincategory 유아동/출산 출산/유아용품

parse_maincategory 유아동/출산 유아동가방/잡화

parse_maincategory 유아동/출산 유아동신발

parse_maincategory 유아동/출산 유아동의류

parse_maincategory 유아동/출산 신생아의류/잡화

parse_maincategory 유아동/출산 물티슈

parse_maincategory 유아동/출산 분유/이유식

parse_maincategory 식품 홈플러스 식품

parse_maincategory 식품 채소

parse_maincategory 식품 정관장/홍삼

parse_maincategory 식품 다이어트

parse_maincategory 식품 건강

parse_maincategory 식품 캔/오일/조미료

parse_maincategory 식품 간편조리/간식

parse_maincategory 식품 생수/커피/음료

parse_maincategory 식품 김치/반찬

parse_maincategory 식품 수산

parse_maincategory 식품 축산

parse_maincategory 식품 쌀/잡곡

parse_maincategory 스포츠/자동차 자동차용품

parse_maincategory 스포츠/자동차 등산/아웃도어

parse_maincategory 스포츠/자동차 캠핑/낚시

parse_maincategory 스포츠/자동차 자전거/보드/기타레저

parse_maincategory 스포츠/자동차 골프

parse_maincategory 스포츠/자동차 구기/라켓

parse_maincategory 스포츠/자동차 휘트니스/수영

parse_maincategory 도서/음반 DVD

parse_maincategory 도서/음반 음반

parse_maincategory 도서/음반 어린이

parse_maincategory 도서/음반 학습/수험

parse_maincategory 도서/음반 해외원서

parse_maincategory 도서/음반 만화/잡지

parse_maincategory 도서/음반 가정/생활/취미/레저

parse_maincategory 도서/음반 인문/사회/과학/IT

parse_maincategory 생활/주방/건강 홈플러스 리빙

parse_maincategory 생활/주방/건강 건강/의료용품

parse_maincategory 생활/주방/건강 공구설비/자재

parse_maincategory 생활/주방/건강 반려동물용품

parse_maincategory 생활/주방/건강 문구/사무용품

parse_maincategory 생활/주방/건강 악기/취미/원예용품

parse_maincategory 생활/주방/건강 위생용품

parse_maincategory 생활/주방/건강 화장지/일용잡화

parse_maincategory 생활/주방/건강 세제/세면용품

parse_maincategory 생활/주방/건강 주방용품

parse_maincategory 생활/주방/건강 샤워기/필터/생활용품

parse_maincategory 생활/주방/건강 손소독제/소독기기

parse_maincategory 컴퓨터/전자 컴퓨터 사업자몰

parse_maincategory 컴퓨터/전자 디지털 액세서리

parse_maincategory 컴퓨터/전자 게임

parse_maincategory 컴퓨터/전자 MP3/스피커

parse_maincategory 컴퓨터/전자 헤드폰/이어폰

parse_maincategory 컴퓨터/전자 휴대폰

parse_maincategory 컴퓨터/전자 카메라

parse_maincategory 컴퓨터/전자 생활/미용가전

parse_maincategory 컴퓨터/전자 계절가전

parse_maincategory 컴퓨터/전자 주방가전

parse_maincategory 컴퓨터/전자 저장장치

parse_maincategory 컴퓨터/전자 영상가전

parse_maincategory 컴퓨터/전자 컴퓨터/용품

parse_maincategory 컴퓨터/전자 모니터/프린터

parse_maincategory e쿠폰/티켓 외식

parse_maincategory 여행 국내여행

parse_maincategory 생활/주방/건강 마스크(성인/유아동)

parse_maincategory 컴퓨터/전자 노트북/태블릿

parse_maincategory 가구/침구 브랜드 가구/침구/인테리어

parse_maincategory 가구/침구 홈패션/인테리어소품

parse_maincategory 가구/침구 커튼/블라인드

parse_maincategory 가구/침구 침구