Nano Hash - криптовалюты, майнинг, программирование

Как удалить пробелы в моем CSV-скрейпе?

Как удалить пробелы в моем csv?

Я бегу: scrapy crawl quotes -o quotes.csv. И выход такой как на картинке.

Я знаю, что это проблема Windows, так как мне приходится использовать приведенный ниже код при работе с csv в Windows. Например, при работе с селеном.

with open('C:\\fa.csv', 'a+', newline='', encoding="utf-8") as outfile:

Scrapy работает с Csv по-разному, и я запускаю с

scrapy crawl quotes -o quotes.csv

There is no: scrapy crawl quotes -o /n quotes.csv

Код:

import scrapy


class QuotesSpider(scrapy.Spider):
    name = "quotes"
    start_urls = [
        'http://quotes.toscrape.com/page/1/',
    ]

    def parse(self, response):
        for quote in response.css('div.quote'):
            yield {
                'text': quote.css('span.text::text').extract_first(),
                'author': quote.css('small.author::text').extract_first(),
                'tags': quote.css('div.tags a.tag::text').extract(),
            }

        next_page = response.css('li.next a::attr(href)').extract_first()
        if next_page is not None:
            next_page = response.urljoin(next_page)
            yield scrapy.Request(next_page, callback=self.parse)

введите здесь описание изображения


  • Вероятно, где-то в scrapy есть такая конфигурация csv... ХММММ. Возможно, в файле init... я могу настроить его в Anaconda... где бы он ни был. Может быть, это исправит. 02.12.2017
  • откройте файл csv в обычном текстовом редакторе и посмотрите, есть ли пустые строки. Если нет пустых строк, значит, проблема в программе, которую вы используете для открытия файла csv. 02.12.2017
  • @furas Проблема также наблюдается в блокноте ++. 02.12.2017
  • Почему вы используете newline='' в open()? Похоже, ваши данные имеют '\n', и вы забыли удалить их перед тем, как вставить csv. Вы знаете команду text.strip()? 02.12.2017
  • Как мне удалить/добавить \n в scrapy? Я не знаком с командой text.strip. Я просто использую новую строку при работе с селеном, так как csv, кажется, создает пробелы 02.12.2017
  • это не проблема скрапа - это стандартная команда в Python. т.е. "\nHello World\n".strip(). Команда .extract_first() дает строку, поэтому вы можете использовать .extract_first().strip(). Команда .extract() выдает список, поэтому требуется дополнительная работа "tags": [x.strip() for x in quote.css('div.tags a.tag::text').extract()] 02.12.2017
  • @furas Я точно следовал этому, но у меня все еще возникает проблема pastebin.com/EZfz4Pn6 02.12.2017
  • что такое FixLineCsvItemExporter? почему ты его используешь? может быть, это создает проблему. 02.12.2017
  • @furas Я удалил его и та же проблема. 02.12.2017
  • Я запускаю ваш код как отдельный скрипт (без создания проекта), и он правильно его сохраняет - pastebin.com/YChnURsM . Возможно, у вас есть дополнительные параметры в настройках, может быть, он использует дополнительную функцию pipeline. А может проблема только в винде - у меня линукс. 02.12.2017
  • @furas Есть ли способ добавить: newline='', encoding=utf-8 в конвейер? Это, наверное, исправит. Помимо некоторых странных ошибок, я попробовал ваш код: pastebin.com/NDtPMRir . Та же проблема. 02.12.2017
  • вы можете написать собственную функцию для экспорта данных, используя CsvItemExporter - это швы он может отправлять параметры в csv.writer - вот пример с экспортером, который пропускает заголовки в CSV 02.12.2017
  • @furas Пока я смотрю файл, извините? Или я должен создать новый файл py. 02.12.2017
  • там описано - кладите код в exporters.py в ту же папку что у вас settings.py и items.py. 02.12.2017

Ответы:


1

Вы можете попробовать следующее исправление:

from scrapy.conf import settings
from scrapy.contrib.exporter import CsvItemExporter


class FixCsvItemExporter(CsvItemExporter):

    def __init__(self, *args, **kwargs):
        newline = settings.get('CSV_NEWLINE', '')
        kwargs['newline'] = newline
        super(FixCsvItemExporter, self).__init__(*args, **kwargs)

Затем в файле settings.py в вашем каталоге сканера вам нужно добавить это:

FEED_EXPORTERS = {
    'csv': 'path.to.sourcefile.FixCsvItemExporter',
}
06.12.2017

2

У меня была та же проблема, и я сам нашел решение: Scrapy выходные данные python csv содержат пустые строки между каждой строкой

Тем не менее, я считаю, что в какой-то момент появится патч.

17.12.2017
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..