这是一个非常微不足道的问题,但我是Scrapy的新手。我试图找到我的问题的解决方案,但我只是看不出这个代码有什么问题。
我的目标是废弃给定网站上的所有歌剧节目。每个节目的数据都在一个div中,类别为“row-fluid row-performance”。我试图迭代它们来检索它但它不起作用。它给了我每次迭代中第一个div的内容(我得到同一个节目的19倍,而不是不同的项目。)
感谢您的任何建议!
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
答案 0 :(得分:3)
尝试将for循环中的xpath更改为以.//
开头。也就是说,只需在双反斜杠前放一个点。您也可以尝试使用extract_first()
代替extract()
,看看是否能提供更好的结果。