当前位置: 首页 > 知识库问答 >
问题:

如何在输出到CSV之前剥离碎片结果

程祺
2023-03-14

我试图从一些HTML中分离出整数,例如“
5500英里
”。

import scrapy

class AlfaShortSpider(scrapy.Spider):
    name = 'alfashort'

    def start_requests(self):
        yield scrapy.Request(url = 'https://www.pistonheads.com/classifieds/used-cars/alfa-romeo/giulia',
                             callback = self.parse_data)


    def parse_data( self, response ):
        advert = response.xpath( '//*[@class="ad-listing"]')
        title = advert.xpath( './/*[@class="listing-headline"]//h3/text()' ).extract()
        price = advert.xpath( './/*[@class="price"]/text()' ).extract()
        mileage = advert.xpath( './/*[@class="specs"]//li[1]/text()' ).extract()
        mileage = [item.strip() for item in mileage]
        mileage = [item.replace(',','') for item in mileage]
        mileage = [item.replace(' miles','') for item in mileage]

        for item in zip(title,price,mileage):
            price_data = {
                    'title' : item[0],
                    'price' : item[1],
                    'mileage' : item[2]
            }

            yield price_data 

我的代码成功地删除了逗号和“英里”,但是在我的CSV输出中,我在这列中得到了不需要的空白行,我认为这是由于原始源代码中的回车。我的CSV看起来像这样:

我的CSV

所以标题和价格栏都很好。但“里程”列是错误所在。

我的脱衣舞指挥有什么问题吗?

共有1个答案

上官和惬
2023-03-14

只需更改里程数的XPath

从…起

mileage = advert.xpath( './/*[@class="specs"]//li[1]/text()' ).extract()

mileage = advert.xpath( './/*[@class="specs"]//li[1]/text()[2]' ).extract()

您将获得正确的输出:

title,price,mileage
ALFA ROMEO GIULIA (0) V6 BITURBO QUADRIFOGLIO                  2018 (2018),"£48,500",5500
ULEZ CHARGE EXEMPT! EURO 6  (2017),"£25,695",11450
ALFA ROMEO GIULIA (0) V6 BITURBO QUADRIFOGLIO NRING            2019 (2019),"£83,500",100
ALFA ROMEO GIULIA (0) TD SPECIALE                              2017 (2017),"£22,500",23700
 类似资料:
  • 问题内容: 这是我在Chrome 11和Firefox 4中测试过的代码段: 如您所见,我超时了,所以我可以测试是否在之前输出。以我的经验,虽然不是。 有没有一种方法可以在结束响应之前输出数据,例如以包形式发送数据? 问题答案: 如果将内容类型更改为文本/纯文本,例如: 然后firefox将立即显示内容。Chrome似乎仍在缓冲(如果您编写更多内容,Chrome会立即显示它)。

  • 我有三个片段F1 F2 F3 F4都可以从侧边栏访问。 这四个都可以在任何时间以任何顺序调用, 现在我想知道,如果已经单击(创建)了F1,则不再创建F1,而只使用片段管理器将片段F1带回到前面。所有其他片段相同 到目前为止,我对容器中的每个片段都尝试了这种方法(片段活动) 如果部分确保不再重新创建片段(如果已经创建),那么我应该在部分中写些什么,以便可以将已经创建的片段放在视图层次结构的前面 请帮

  • 我需要以.csv格式输出我的hadoop结果。我要怎么做?我的代码:https://github.com/studhadoop/xml/blob/master/xmlparser11.java 我是否应该简单地在代码中包含csvoutputFormat。我正在使用mapreduce API MyJob.sh 解决方案

  • 问题内容: 我需要以.csv格式输出hadoop结果。我该怎么做?我的代码:https : //github.com/studhadoop/xml/blob/master/XmlParser11.java 我应该在我的代码中简单地包含csvoutputFormat吗?我正在使用mapreduce API myjob.sh 解 是的,我不见了>在猫里 问题答案: 您可以使用TextOutputFor

  • 我有一个活动A,它调用fragment Bf,它调用fragment Cf。我希望在调用Cf时将Bf放置在Backback中,以便用户可以导航回它。然而,如果在Cf中按下特定按钮,我希望Bf从Backback中删除。这可能吗? 我看到有一个popBackStack()函数。然而,我有点困惑这将如何工作。使用此功能安全吗?是否有可能在Backback上的Bf之后插入来自不同应用程序的活动? 此外,是

  • 问题内容: 有没有一种简单的方法可以从Linux命令行运行MySQL查询并以CSV格式输出结果? 这是我现在正在做的事情: 当有很多列需​​要用引号引起来时,或者结果中有引号需要转义时,它将变得混乱。 问题答案: 从http://www.tech-recipes.com/rx/1475/save-mysql-query-results-into-a-text-or- csv-file/ 使用此命令