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

조회수 1827회

스크래피 스파이더 작성 질문 입니다. 간단한 코드를 작성하고 테스트 중인데요 이중 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 태그만 저장되는 문제가 나타납니다.

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

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

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

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

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 아.. 전 그렇군요. 그럼 어떻게 수정을 해야 할까요? 제 눈엔 맞게 보이는데 ㅠㅠ 알 수 없는 사용자 2016.8.4 00:52

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)