Python:Scrapy CSV导出错误?

时间:2015-04-22 20:29:21

标签: python csv export scrapy

我只是想写一个csv。但是我有两个单独的for语句,因此每个for-statement的数据独立导出并中断顺序。建议?

def parse(self, response):
        hxs = HtmlXPathSelector(response)
        titles = hxs.select('//td[@class="title"]')
        subtext = hxs.select('//td[@class="subtext"]')
        items = []
        for title in titles:
            item = HackernewsItem()
            item["title"] = title.select("a/text()").extract()
            item["url"] = title.select("a/@href").extract()
            items.append(item)
        for score in subtext:
            item = HackernewsItem()
            item["score"] = score.select("span/text()").extract()
            items.append(item)
        return items

如下图所示,第二个for语句打印在其他语句之下,而不是“其他”作为标题。

附加了CSV图片:csv file

和github链接获取完整文件:https://github.com/nchlswtsn/scrapy/blob/master/items.csv

2 个答案:

答案 0 :(得分:2)

您的导出元素顺序与您在CSV文件中找到的顺序一致,首先导出所有标题然后导出所有子文本元素。
我想你想废弃HN文章,这是我的建议:

def parse(self, response):
    hxs = HtmlXPathSelector(response)
    titles = hxs.select('//td[@class="title"]')
    items = []
    for title in titles:
        item = HackernewsItem()
        item["title"] = title.select("a/text()").extract()
        item["url"] = title.select("a/@href").extract()
        item["score"] = title.select('../td[@class="subtext"]/span/text()').extract()
        items.append(item)
    return items

我没有对它进行测试,但它会给你一个想法。

答案 1 :(得分:1)

Python 2.7中的CSV模块不支持Unicode,因此建议使用unicodecsv代替。

$pip install unicodecsv
  

unicodecsv是Python 2的csv模块的替代品,它可以毫不费力地支持unicode字符串。

然后使用此代替import csv

import unicodecsv as csv