scrapy 크롤링 중 이중 for문 질문 입니다.


스크래피 스파이더 작성 질문 입니다. 간단한 코드를 작성하고 테스트 중인데요 이중 FOR문을 쓴 item의 DB 저장이 문제 입니다.

스파이더 중 item 스크랩 영역은 아래와 같습니다.

    def parse_item(self, response):
            for sel in response.xpath('//*[@id="contents"]/div[10]/section/section[1]/section[1]'):
            item = item()

            #아이템 스크랩 영역

                for actress in sel.xpath("//*[@itemprop='actors']//*[@itemprop='name']"):
                    actress_ = actress.xpath("text()").extract()
                    item['Actress'] = actress_[0].strip()
                    yield item

두번째 for을 작성한 이유는

<div class="actress">
    <span>여배우1</span>
    <span>여배우2</span>
    <span>여배우3</span>
</div>

처럼 여배우 1,2,3을 스크랩하기 위함 입니다. 그런데 스파이더 실행 후

DB를 확인해보면 여배우 3만 저장됩니다. 다른페이지도 마찬가지구요.

그래서 yield아래에 print(item['Actress']) 후 커맨드 창에서 확인을 해보면 여배우 1,2,3이 모두 출력 됩니다. pudb로 디버깅을 해봐도 1,2,3이 모두 yield되는 것 같기는 한데..(이부분은 확실치 않네요)

아무리 봐도 뭐가 문제인지 모르겠습니다.

파이프라인이나 세팅에서도 별 문제가 없는데.. 실제 테이블에는 마지막 span 태그만 저장되는 문제가 나타납니다.

어떤 문제일지 조언 부탁드립니다 ^


조회수 157


1 답변


parse_item이 반환하는 값이 item인가요?

그렇다면 2번째 for문에서 item 값을 계속 덮어쓰기 때문에 마지막 값인 여배우3만 반환하게 됩니다.

  • 2016년 08월 03일에 작성됨
    프로그래밍 언어를 좋아하는 프로그래머

  • 아.. 전 그렇군요. 그럼 어떻게 수정을 해야 할까요? 제 눈엔 맞게 보이는데 ㅠㅠ     Jinwithyoo   2016.8.4 00:52     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close