相关疑难解决方法(0)

Scrapy python csv输出在每行之间有空行

我在生成的csv输出文件中的每行scrapy输出之间得到不需要的空行.

我已经从python2迁移到python 3,并且我使用的是Windows 10.因此我正在调整我的scrapy项目用于python3.

我当前(现在,唯一的)问题是当我将scrapy输出写入CSV文件时,我在每行之间得到一个空行.这里已经在几个帖子中强调了这一点(它与Windows有关),但我无法获得解决方案.

碰巧的是,我还在piplines.py文件中添加了一些代码,以确保csv输出处于给定的列顺序而不是一些随机顺序.因此,我可以使用normal scrapy crawl charleschurch运行此代码而不是scrapy crawl charleschurch -o charleschurch2017xxxx.csv

有谁知道如何在CSV输出中跳过/省略此空白行?

我的pipelines.py代码在下面(我可能不需要该import csv行,但我怀疑我可能会做最后的答案):

# -*- coding: utf-8 -*-

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html

import csv
from scrapy import signals
from scrapy.exporters import CsvItemExporter

class CSVPipeline(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 …
Run Code Online (Sandbox Code Playgroud)

python csv scrapy web-scraping

5
推荐指数
1
解决办法
2196
查看次数

Scrapy - 删除重复项并将数据输出为单个列表?

我使用下面的代码来抓取页面上的多个链接,并从每个相应的链接中获取数据列表:

import scrapy

class testSpider(scrapy.Spider):
    name = "quotes"
    start_urls = ['http://www.website.com']

    def parse(self, response):
        urls = response.css('div.subject_wrapper > a::attr(href)').extract()
        for url in urls:
            url = response.urljoin(url)
            yield scrapy.Request(url=url, callback=self.getData)

    def getData(self, response):
        data = {'data': response.css('strong.data::text').extract()}
        yield data
Run Code Online (Sandbox Code Playgroud)

它工作正常,但由于它返回每个链接的数据列表,当我输出到 CSV 时,它看起来如下所示:

"dalegribel,Chad,Ninoovcov,dalegribel,Gotenks,sillydog22"

"kaylachic,jmargerum,kaylachic"

"Kempodancer,doctordbrew,Gotenks,dalegribel"

"Gotenks,dalegribel,jmargerum"

...
Run Code Online (Sandbox Code Playgroud)

是否有任何简单/有效的方法将数据输出为单个行列表而没有任何重复项(相同的数据可以出现在多个页面上),类似于以下内容?

dalegribel
Chad
Ninoovcov
Gotenks
...
Run Code Online (Sandbox Code Playgroud)

我尝试使用数组,然后循环每个元素来获取输出,但收到错误消息,指出yield 仅支持“Request、BaseItem、dict 或 None”。另外,由于我将运行大约 10k 个条目,因此我不确定将数据存储在数组中是否会减慢抓取速度。谢谢。

python scrapy

1
推荐指数
1
解决办法
4349
查看次数

标签 统计

python ×2

scrapy ×2

csv ×1

web-scraping ×1