2017-11-20 7 views
0

그것은 매우 사소한 질문이지만 나는 Scrapy를 처음 사용합니다. 내 문제에 대한 해결책을 찾으려고 노력했지만이 코드가 무엇이 잘못되었는지 알 수 없습니다.Scrapy에서 div를 반복하는 방법은 무엇입니까?

나의 목표는 주어진 웹 사이트에서 오페라 쇼를 모두 스크랩하는 것입니다. 모든 쇼의 데이터는 클래스 "행 - 유체 행 성능"이있는 하나의 div 안에 있습니다. 나는 그것들을 되찾기 위해 그들을 반복하려고 노력하고 있지만 그것은 작동하지 않는다. 그것은 각 반복에서 첫 번째 div의 내용을 제공합니다 (나는 다른 항목 대신에 동일한 쇼를 19x 번 얻고 있습니다).

어떤 조언을 주셔서 감사합니다!

import scrapy 
from ..items import ShowItem 

class OperaSpider(scrapy.Spider): 
    name = "opera" 
    allowed_domains = ["http://www.opera.krakow.pl"] 
    start_urls = [ 
     "http://www.opera.krakow.pl/pl/repertuar/na-afiszu/listopad" 

    ] 


    def parse(self, response): 
     divs = response.xpath('//div[@class="row-fluid row-performance "]') 
     for div in divs: 
      item= ShowItem() 
      item['title'] = div.xpath('//h2[@class="item-title"]/a/text()').extract() 
      item['time'] = div.xpath('//div[@class="item-time vertical-center"]/div[@class="vcentered"]/text()').extract() 
      item['date'] = div.xpath('//div[@class="item-date vertical-center"]/div[@class="vcentered"]/text()').extract() 
      yield item 

답변

2

for 루프 내의 xpaths를 .//으로 시작하여 변경하십시오. 즉, 이중 백 슬래시 앞에 점을 찍으십시오. extract() 대신 extract_first()을 사용해보고 더 나은 결과를 얻을 수 있는지 알아볼 수도 있습니다.

+0

".//"worked, thanks :) – Grevioos

+0

정말 도움이된다면 정답으로 표시해주세요. 감사. –