使用csv输出的scrapy问题

时间:2012-02-17 10:50:07

标签: scrapy

这是我的蜘蛛:

    from scrapy.contrib.spiders import CrawlSpider,Rule
    from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
    from scrapy.selector import HtmlXPathSelector
    from vrisko.items import VriskoItem
    from scrapy.http import Request

    class vriskoSpider(CrawlSpider):
        name = 'vrisko'
        allowed_domains = ['vrisko.gr']
        start_urls = ['http://www.vrisko.gr/search/%CE%B3%CE%B9%CE%B1%CF%84%CF%81%CE%BF%CF%82/%CE%BA%CE%BF%CF%81%CE%B4%CE%B5%CE%BB%CE%B9%CE%BF']
        rules = (Rule(SgmlLinkExtractor(allow=('\?page=\d')),'parse_start_url',follow=True),)

        def parse_start_url(self, response):
         hxs = HtmlXPathSelector(response)
         subpages = hxs.select('//a[@class="detailsHyper_class"]/@href').extract()

         ep = hxs.select('//a[@itemprop="name"]/text()').extract()
         ad = hxs.select('//div[@class="results_address_class"]/text()').extract()
         for eponimia,address,subpage in zip(ep,ad,subpages):
          vriskoit = VriskoItem()
          vriskoit['eponimia'] = eponimia
          vriskoit['address'] = address 
          request = Request(subpage,callback = self.subPage)
          request.meta['vriskoit'] = vriskoit
          yield request

        def subPage(self,response):
         vriskoit = response.meta['vriskoit']
         hxs = HtmlXPathSelector(response)
         vriskoit['category'] = hxs.select('//div[@class="category_class"]/span/text()').extract()
         yield vriskoit

这是我的pipiline:

    import csv

    class myExporter(object):

    def __init__(self):
        self.brandCategoryCsv = csv.writer(open('brandCategoryTable.csv', 'wb'))
        self.brandCategoryCsv.writerow(['eponimia', 'address','category'])

    def process_item(self, item, spider):
            for e,a,c in zip(item['eponimia'],item['address'],item['category']):          
                 self.brandCategoryCsv.writerow([e.encode('utf-8'), a.encode('utf-8'), c.encode('utf-8')])
                 return item

我的问题是,对于前两个字段(eponimia,地址),只有第一个字符写入输出csv文件,我无法找到原因。

任何帮助都会非常感激,我没有想法。

1 个答案:

答案 0 :(得分:2)

zip

中删除myExporter.process_item功能
def process_item(self, item, spider):          
    self.brandCategoryCsv.writerow([item['eponimia'].encode('utf-8'),
                                    item['address'].encode('utf-8'), 
                                    item['category'].encode('utf-8')])
    return item

您已将项目列表转换为vriskoSpider.parse_start_url中的各个项目。

zip迭代你的字符串:

In [1]: a = 'test1'

In [2]: b = 'test2'

In [3]: for x, y in zip(a, b):
   ...:     print x, y
   ...:
t t
e e
s s
t t
1 2