2015-04-02 38 views
1

我是scrapy新手,寫下了蜘蛛。我想寫入xml或csv與csv中的每一行或xml中的每個項目作爲name,tele,addr。使用scrapy將itemloader逐項添加到xml或csv

我使用命令: scrapy爬行ABC -o items.csv -t CSV

我要找輸出:

name,addr,tele 
n1,a1,t1 
n2,a2,t2 
n3,a3,t3 

但我得到:

name,addr,tele 
n1,n2,n3 a1,a2,a3 t1,t2,t3 

蜘蛛代碼

import scrapy 

from abc.items import abcItem 
from scrapy.contrib.loader import ItemLoader 

class abcSpider(scrapy.Spider): 
    name = "abc" 
    allowed_domains = ["abc.com"] 
    start_urls = ["abc.com/"] 

    def parse(self, response): 
     items = [] 
     l = ItemLoader(item=abcItem(), response=response) 
     l.add_xpath('name', '//section[@class="abcrp"]/a/@title') 
     l.add_xpath('tele', '//p[@class="abcw"]/a/@href') 
     l.add_xpath('addr', '//span[@class="dn"]/text()') 
     return l.load_item() 

項目代碼

import scrapy 
class abcItem(scrapy.Item): 
    name = scrapy.Field() 
    addr = scrapy.Field() 
    tele = scrapy.Field() 
+0

顯示相關頁面的HTML代碼或共享網頁鏈接。謝謝。 – alecxe 2015-04-02 18:09:54

+0

我猜你有一個換行符的問題 - 難道你的腳本會生成linux換行符,並在Windows機器上查看它嗎? Windows中的Linux換行看起來像空白。 – Alexander 2015-04-02 18:18:29

+0

alecxe,xpaths正常工作,我也可以寫入csv。問題在於itemloader正在返回3個列表中的字段的所有值:name,addr,tele。這些列表在3 csv列中寫入單行(xml情況下爲3個項目)。我需要一種方法來每個項目有一行。所以如果有10個名字,addr和tele,我需要10行而不是1行。任何幫助? – sam 2015-04-03 03:08:27

回答

0

我能解決這個問題。我在外部標籤上使用了一個for循環,其中包含我的名字,地址和遠程標籤