scrapy 크롤링 중 이중 for문 질문 입니다.
조회수 1844회
스크래피 스파이더 작성 질문 입니다. 간단한 코드를 작성하고 테스트 중인데요 이중 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
만 반환하게 됩니다.-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력