如何在Scrapy中迭代div?

时间:2017-11-20 19:53:07

标签: python web-scraping scrapy

这是一个非常微不足道的问题,但我是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

1 个答案:

答案 0 :(得分:3)

尝试将for循环中的xpath更改为以.//开头。也就是说,只需在双反斜杠前放一个点。您也可以尝试使用extract_first()代替extract(),看看是否能提供更好的结果。