抓/忽略空项目

时间:2018-10-30 13:34:00

标签: python scrapy

我做了一个小型机器人,它通过搜索参数列表进行处理。它可以正常工作,直到页面上显示多个结果为止:product_prices_euros给出了一个项目列表,其中一半为空。因此,当我与product_prices_cents连接时,我将得到如下输出:

  'price' : '',76 

获得一半结果。有没有一种简单的方法可以防止收集空物品?我对product_prices_euros的输出如下:

[' 1', ' ', ' 2', ' ', ' 2', ' ', ' 1', ' ', ' 1', ' ', ' 1', ' ', ' 2', ' ']

我只想保留'1','2'等...

这是看起来像CSS的东西。这边可能有些东西:

< span class="product-pricing__main-price" >
2 
< span class="cents" >,79€< /span >
< /span >

我的代码:

def start_requests(self):
    base_url="https://new.carrefour.fr/s?q="
    test_file = open(r"example", "r")
    reader = csv.reader(test_file)
    for row in reader:
        if row:
            url = row[0]
            absolute_url = base_url+url
            print(absolute_url)
            yield scrapy.Request(absolute_url, meta={'dont_redirect': True, "handle_httpstatus_list": [302, 301]}, callback=self.parse)


def parse(self, response):
    product_name = response.css("h2.label.title::text").extract()
    product_packaging = response.css("div.label.packaging::text").extract()
    product_price_euros = response.css("span.product-pricing__main-price::text").extract()
    product_price_cents = response.css("span.cents::text").extract()
    for name, packaging, price_euro, price_cent in zip(product_name, product_packaging, product_price_euros, product_price_cents):
            yield { 'ean' : response.css("h1.page-title::text").extract(), 'name': name+packaging, 'price': price_euro+price_cent}

有什么主意吗? :)

2 个答案:

答案 0 :(得分:0)

最后,您可以根据不需要的内容过滤列表:

list(filter(lambda a: a != '', yourList))

答案 1 :(得分:0)

如果仅过滤空的 euro 元素,如何将它们与适当的 cents 匹配?

首先,恕我直言,我认为如果您遍历产品以收集其数据会更容易。例如

for product in response.css('.product-list__item'):
    name = product.css("h2.label.title::text").extract()
    # ...

因此,您可以像这样获得价格和美分:

>>> product.css('.product-pricing__main-price  ::text')
['2', ',99€']

>>> ''.join(product.css('.product-pricing__main-price  ::text').getall())
'2,99€'