Scrapy พิมพ์ฟิลด์แต่ไม่ได้เติมไฟล์ XML

ฉันมีปัญหาในการพิมพ์ไฟล์ XML อย่างถูกต้อง แต่ไม่มีเนื้อหาใดๆ ในไฟล์ XML

ผลลัพธ์ในเทอร์มินัลคือ:

[u'Tove'] [u'Jani'] [u'Reminder'] [u"Don't forget me this weekend!"]

อย่างไรก็ตาม ผลลัพธ์ site_products.xml ให้ผลลัพธ์ดังนี้ (ซึ่งผิด ไม่มีข้อมูล):

<?xml version="1.0" encoding="utf-8"?>
<items></items>

Spider.py

from scrapy.contrib.spiders import XMLFeedSpider
from crawler.items import CrawlerItem

class SiteSpider(XMLFeedSpider):
    name = 'site'
    allowed_domains = ['www.w3schools.com']
    start_urls = ['http://www.w3schools.com/xml/note.xml']
    itertag = 'note'

    def parse_node(self, response, selector):
        to = selector.xpath('//to/text()').extract()
        who = selector.xpath('//from/text()').extract()
        heading = selector.xpath('//heading/text()').extract()
        body = selector.xpath('//body/text()').extract()
        return item

Pipeline.py

from scrapy import signals
from scrapy.contrib.exporter import XmlItemExporter

class XmlExportPipeline(object):

    def __init__(self):
        self.files = {}

    @classmethod
    def from_crawler(cls, crawler):
         pipeline = cls()
         crawler.signals.connect(pipeline.spider_opened, signals.spider_opened)
         crawler.signals.connect(pipeline.spider_closed, signals.spider_closed)
         return pipeline

    def spider_opened(self, spider):
        file = open('%s_products.xml' % spider.name, 'w+b')
        self.files[spider] = file
        self.exporter = XmlItemExporter(file)
        self.exporter.start_exporting()

    def spider_closed(self, spider):
        self.exporter.finish_exporting()
        file = self.files.pop(spider)
        file.close()

    def process_item(self, item, spider):
        self.exporter.export_item(item)
        return item

items.py

import scrapy                                                                                           


class CrawlerItem(scrapy.Item):
    to = scrapy.Field()
    who = scrapy.Field()
    heading = scrapy.Field()
    body = scrapy.Field()
    pass

การตั้งค่า.py

BOT_NAME = 'crawler'                                                                                                                                                                                           
SPIDER_MODULES = ['crawler.spiders']                                                                    
NEWSPIDER_MODULE = 'crawler.spiders'
ITEM_PIPELINES = {'crawler.pipelines.XmlExportPipeline': 300,}

ความช่วยเหลือใด ๆ เกี่ยวกับเรื่องนี้จะได้รับการชื่นชมจริงๆ


person J.Zil    schedule 24.04.2015    source แหล่งที่มา
comment
สไปเดอร์ของคุณไม่ได้เติมฟิลด์ในรายการของคุณ (คุณกำหนดที่ไหน item)   -  person Blender    schedule 25.04.2015
comment
@Blender ฉันไม่แน่ใจว่าจะทำอย่างไร เมื่อก่อนฉันมีรายการคืนสินค้าแต่ไม่ได้ผลเมื่อฉันลองแล้ว ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชม   -  person J.Zil    schedule 25.04.2015


คำตอบ (1)


คุณต้องสร้างอินสแตนซ์ CrawlerItem ในเมธอด parse_node() ของคุณ:

def parse_node(self, response, selector):
    item = CrawlerItem()
    item['to'] = selector.xpath('//to/text()').extract()
    item['who'] = selector.xpath('//from/text()').extract()
    item['heading'] = selector.xpath('//heading/text()').extract()
    item['body'] = selector.xpath('//body/text()').extract()
    return item
person alecxe    schedule 24.04.2015