python يعيش إخراج الثعبان إلى كسف العادية




حفاث (3)

لا تحتاج إلى إنشاء ملف كسف نفسك عند تحليل العناصر، يمكن سكرابي تصدير بشكل افتراضي إلى ملف كسف.

لذا قم بتغيير طريقة parse إلى:

def parse(self, response):
    for sel in response.xpath('//*[contains(@class, "ajax_block_product")]'):
        item = EscrapItem()
        item['revendeur'] = '\n'.join(sel.xpath('//*[contains(@class, "center_block")]/h2/a/@href').re('tunisianet'))
        item['produit'] = '\n'.join(sel.xpath('//*[contains(@class, "center_block")]/h2/a/text()').extract())
        item['lien'] = '\n'.join(sel.xpath('//*[contains(@class, "center_block")]/h2/a/@href').extract())
        item['description'] = '\n'.join(sel.xpath('//*[contains(@class, "product_desc")]/a/text()').extract())
        item['prix'] = '\n'.join(sel.xpath('//*[contains(@class, "price")]/text()').extract())
        yield item

في وقت لاحق عند استدعاء سكرابي يمكنك استدعاؤه مع:

scrapy crawl myspider -o output.csv

الآن لديك كل ما تبذلونه من البنود تصديرها إلى ملف كسف.

إذا كنت لا تزال ترغب في السيطرة عليه على خط أنابيب الخاص بك، تحقق هنا لخلق مصدر الخاصة بك . ويود هذا:

from scrapy import signals
from scrapy.exporters import CsvItemExporter

class CSVExportPipeline(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.csv' % spider.name, 'w+b')
        self.files[spider] = file
        self.exporter = CsvItemExporter(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

لإنشاء خط أنابيب الخاصة بك تأكد من قراءة هذا تماما.

مرحبا أنا جديد على بيثون / سكرابي العالم، ولست بحاجة إلى تصدير قائمة المنتجات إلى كسف مثل هذا إكسيمبل: ما أريد ولكن أحصل على هذا واحد: ما حصلت

///// سبيدر: /////

import scrapy
import csv
from escrap.items import EscrapItem

class EscrapSpider(scrapy.Spider):
    name = "tunisianet"
    allowed_domains = ["tunisianet.com.tn"]
    start_urls = [
        "http://www.tunisianet.com.tn/385-logiciels-informatique-tunisie/"
    ]

    def parse(self, response):
        for sel in response.xpath('//*[contains(@class, "ajax_block_product")]'):
            item = EscrapItem()
            item['revendeur'] = '\n'.join(sel.xpath('//*[contains(@class, "center_block")]/h2/a/@href').re('tunisianet'))
            item['produit'] = '\n'.join(sel.xpath('//*[contains(@class, "center_block")]/h2/a/text()').extract())
            item['lien'] = '\n'.join(sel.xpath('//*[contains(@class, "center_block")]/h2/a/@href').extract())
            item['description'] = '\n'.join(sel.xpath('//*[contains(@class, "product_desc")]/a/text()').extract())
            item['prix'] = '\n'.join(sel.xpath('//*[contains(@class, "price")]/text()').extract())
        data = [item['revendeur'], item['produit'], item['lien'], item['description'], item['prix']]
        out = open('out.csv', 'w')
        for row in data:
            for column in row:
                out.write(column.encode('utf-8'))
        return data

///// إيتمس : /////

import scrapy

class EscrapItem(scrapy.Item):
    revendeur = scrapy.Field()
    produit = scrapy.Field()
    lien = scrapy.Field()
    description = scrapy.Field()
    prix = scrapy.Field()

///// بيبلينس : /////

class EscrapPipeline(object):

    # put all words in lowercase
    words_to_filter = ['politics', 'religion']
    def process_item(self, item, spider):
        for word in self.words_to_filter:
            if word in      unicode([item['revendeur'],item['produit'],item['lien'],item['description'],item    ['prix']]).lower():
                raise DropItem("Contains forbidden word: %s" % word)
        else:
            return item

///// ماي سيتينغ : /////

BOT_NAME = 'escrap'

SPIDER_MODULES = ['escrap.spiders']
NEWSPIDER_MODULE = 'escrap.spiders'
ITEM_PIPELINES = {'escrap.pipelines.EscrapPipeline': 1}
FEED_EXPORTERS = {
    'csv': 'escrap.escrap_csv_item_exporter.EscrapCsvItemExporter',
}
FIELDS_TO_EXPORT = [
    'revendeur',
    'produit',
    'lien',
    'description',
    'prix'
]

من المحتمل أن تقوم بتعيين الخلية حيث تريد أن تكتب لك البيانات. شيء مثل:

worksheet.write('A1','thing you want to write')

أو قد يكون افتراضيا لكتابة المحتوى في 'A'


فإنه تصدير ولكن ليس مع شكل أريد، أريد شكل مثل هذا واحد: http://i.imgur.com/r8LaVem.png ، ولكن حصلت على هذا واحد http://i.imgur.com/8IVnlui.png . هنا هي def parse(self, response): item = TfawItem() data= [] items = [] out = open('out.csv', 'a') x = response.xpath('//*[contains(@class, "ajax_block_product")]') for i in range(0, len(x)): item['revendeur'] = response.xpath('//*[contains(@class, "center_block")]/h2/a/@href').re('tunisianet')[i] item['produit'] = response.xpath('//*[contains(@class, "center_block")]/h2/a/text()').extract()[i] item['url'] = response.xpath('//*[contains(@class, "center_block")]/h2/a/@href').extract()[i] item['description'] = response.xpath('//*[contains(@class, "product_desc")]/a/text()').extract()[i] item['prix'] = response.xpath('//*[contains(@class, "price")]/text()').extract()[i] data = item['revendeur'], item['produit'], item['url'], item['description'], item['prix'] out.write(str(data)) out.write('\n') النهائية: def parse(self, response): item = TfawItem() data= [] items = [] out = open('out.csv', 'a') x = response.xpath('//*[contains(@class, "ajax_block_product")]') for i in range(0, len(x)): item['revendeur'] = response.xpath('//*[contains(@class, "center_block")]/h2/a/@href').re('tunisianet')[i] item['produit'] = response.xpath('//*[contains(@class, "center_block")]/h2/a/text()').extract()[i] item['url'] = response.xpath('//*[contains(@class, "center_block")]/h2/a/@href').extract()[i] item['description'] = response.xpath('//*[contains(@class, "product_desc")]/a/text()').extract()[i] item['prix'] = response.xpath('//*[contains(@class, "price")]/text()').extract()[i] data = item['revendeur'], item['produit'], item['url'], item['description'], item['prix'] out.write(str(data)) out.write('\n')





scrapy