Сохранение результатов scrapy в файл csv - PullRequest
0 голосов
/ 20 октября 2018

У меня проблемы с веб-сканером, который я написал.Я хочу сохранить данные, которые я получаю.Если я правильно понял из учебника по scrapy, мне просто нужно дать его, а затем запустить сканер, используя scrapy crawl <crawler> -o file.csv -t csv верно?По какой-то причине файл остается пустым.Вот мой код:

# -*- coding: utf-8 -*-
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor

class PaginebiancheSpider(CrawlSpider):
name = 'paginebianche'
allowed_domains = ['paginebianche.it']
start_urls = ['https://www.paginebianche.it/aziende-clienti/lombardia/milano/comuni.htm']

rules = (
    Rule(LinkExtractor(allow=(), restrict_css = ('.seo-list-name','.seo-list-name-up')),
         callback = "parse_item",
         follow = True),)

def parse_item(self, response):
    if(response.xpath("//h2[@class='rgs']//strong//text()") != [] and response.xpath("//span[@class='value'][@itemprop='telephone']//text()") != []):
        yield ' '.join(response.xpath("//h2[@class='rgs']//strong//text()").extract()) + " " + response.xpath("//span[@class='value'][@itemprop='telephone']//text()").extract()[0].strip(),

Я использую Python 2.7

1 Ответ

0 голосов
/ 20 октября 2018

Если вы посмотрите на вывод паука, вы увидите кучу сообщений об ошибках, таких как это регистрируемое:

2018-10-20 13:47:52 [scrapy.core.scraper] ERROR: Spider must return Request, BaseItem, dict or None, got 'tuple' in <GET https://www.paginebianche.it/lombardia/abbiategrasso/vivai-padovani.html>

Что это означает, что вы не получаете правильную вещь - вам нужноdicts или Item s, а не кортежи из одного элемента, которые вы создаете.
Что-то настолько простое, как это должно работать:

yield {
    'name': response.xpath("normalize-space(//h2[@class='rgs'])").get(),
    'phone': response.xpath("//span[@itemprop='telephone']/text()").get()
}
...