垃圾csv文件有统一的空行吗?

2024-09-30 02:16:56 发布

您现在位置:Python中文网/ 问答频道 /正文

这是蜘蛛:

import scrapy
from danmurphys.items import DanmurphysItem

class MySpider(scrapy.Spider):
    name = 'danmurphys'
    allowed_domains = ['danmurphys.com.au']
    start_urls = ['https://www.danmurphys.com.au/dm/navigation/navigation_results_gallery.jsp?params=fh_location%3D%2F%2Fcatalog01%2Fen_AU%2Fcategories%3C%7Bcatalog01_2534374302084767_2534374302027742%7D%26fh_view_size%3D120%26fh_sort%3D-sales_value_30_days%26fh_modification%3D&resetnav=false&storeExclusivePage=false']


    def parse(self, response):        
        urls = response.xpath('//h2/a/@href').extract()
        for url in urls:            
            request = scrapy.Request(url , callback=self.parse_page)      
            yield request

    def parse_page(self , response):
        item = DanmurphysItem()
        item['brand'] = response.xpath('//span[@itemprop="brand"]/text()').extract_first().strip()
        item['name'] = response.xpath('//span[@itemprop="name"]/text()').extract_first().strip()
        item['url'] = response.url     
        return item

以下是项目:

^{pr2}$

当我用这个命令运行蜘蛛时:

scrapy crawl danmurphys -o output.csv

输出如下: enter image description here


Tags: nameimportselfcomurlparseresponseextract
3条回答

此输出显示了在windows上使用"w"模式打开的csv文件句柄的典型症状(可能是为了修复python3的兼容性),但是省略了newline。在

虽然这对基于Linux/Unix的系统没有影响,但是在Windows上,会发出2个回车符,在每个数据行后面插入一个假空行。在

with open("output.csv","w") as f:
     cr = csv.writer(f)

正确的方法(python 3):

^{pr2}$

(在python2中,将"wb"设置为开放模式可以修复它)

如果文件是由您不能或不想修改的程序创建的,则始终可以按如下方式对文件进行后期处理:

with open("output.csv","rb") as f:
   with open("output_fix.csv","w") as f2:
       f2.write(f.read().decode().replace("\r","")) # python 3
       f2.write(f.read().replace("\r","")) # python 2

Scrapy 1.5.0和Python 3.6.5::Anaconda,Inc

我通过以下步骤设法解决这个问题:


文件夹结构

C:.
|   scrapy.cfg
|
\---my_scraper
    |   exporters.py
    |   items.py
    |   middlewares.py
    |   pipelines.py
    |   settings.py
    |   __init__.py
    |
    +---spiders
    |   |   my_spider.py
    |   |   __init__.py
    |

在出口商.py

^{pr2}$

在设置.py

# ...

FEED_EXPORT_ENCODING = 'utf-8'

FEED_EXPORTERS = {
    'csv': 'my_scraper.exporters.MyCsvItemExporter',
}

CSV_DELIMITER = ';'

我希望这对你有帮助

要在scray1.3中修复这个问题,可以通过在scrapy.exporters中的CsvItemExporter类的__init__方法中添加newline=''作为参数来修补它。在

相关问题 更多 >

    热门问题