Scrapy 制作的 for 循环中不包含项目

Item not included in for loop made in Scrapy

我认为这个问题可能有一个简单的解决方案...我想做的就是提取文本,其中列出了带有我的变量项 ['genre'] 的流派类型,非常简单.. . 但是,由于我正在提取的项目只出现在我正在抓取的页面上一次,因此当循环遍历其他项目(例如项目 ['artist'] 时,项目 ['genre'] 不包括在内。任何帮助,将不胜感激。这是我认为是相关的代码。

def parse_item(self, response):#
    for info in response.xpath('//div[@class="entry vevent"] | //div[@id="page"]'):
        item = TutorialItem() # Extract items from the items folder.
        item ['artist'] = info.xpath('.//span[@class="summary"]//text()').extract() # Extract artist information.
        item ['date'] = info.xpath('.//span[@class="dates"]//text()').extract() # Extract date information.
        preview = ''.join(str(s)for s in item['artist'])
        item ['genre'] = info.xpath('.//div[@class="header"]//text()').extract()

真的希望这是有道理的,如果没有,我们深表歉意!

我想你在循环结束时错过了 return item

您只获得一次 流派 的原因是 response.xpath('//div[@class="entry vevent"] | //div[@id="page"]') 的 return 列表将包含一个 div(with id="page") 和一堆 div (with class="entry vevent")

在遍历上述列表时,div[@id="page"] 将满足 genre xpath,

即,这个 div 包含另一个 div,它有一个 class="header"

In [1]: a = response.xpath('//div[@class="entry vevent"] | //div[@id="page"]')

In [2]: a[0].xpath('.//div[@class="header"]//text()').extract()
Out[2]: [u'Clubbing Overview']

In [3]: a[1].xpath('.//div[@class="header"]//text()').extract()
Out[3]: []

In [4]: a[2].xpath('.//div[@class="header"]//text()').extract()
Out[4]: []
...

另一边div[@class="entry vevent"],它不包含任何div 有一个 class="header" 所以最终会导致得到空列表作为输出

有道理吗?

一个解决方案是将 genre xpath 放在循环之外,或者您可以将 genre 的 xpath 修改为

info.xpath('.//div[@class="header"]//text() | ./parent::div[@class="rows"]/preceding-sibling::div[@class="header"]//text()').extract()