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

时间:2015-04-10 21:05:49

标签: python mysql xpath scrapy

我认为这个问题可能有一个简单的解决方案...我想要做的就是用我的变量项['genre']提取列出类型类型的文本,这很简单......但是,我正在提取的项目仅出现在我正在抓取的页面上,当循环浏览其他项目(例如项目['artist']时,项目['genre']不包括在内。任何帮助,将不胜感激。以下是我认为相关的代码。

def parse_item(self, response):#http://stackoverflow.com/questions/15836062/scrapy-crawlspider-doesnt-crawl-the-first-landing-page
    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()

真的希望这是有道理的,如果没有道歉!

2 个答案:

答案 0 :(得分:1)

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

在迭代上面的列表时,div[@id="page"]将满足流派 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 =“标题“所以最终将导致将空列表作为输出

有意义吗?

一种解决方案是将流派 xpath置于循环之外,或者您可以将类型的xpath修改为

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

答案 1 :(得分:0)

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