无法使用python

时间:2019-04-03 13:22:10

标签: python web-scraping scrapy

我需要从html获取数据,但是每当我尝试获取总是标为“ none”的“常规价格”数据时,response.css,response.xpath和组合均无法正常工作

我需要获取enter code here的值文本,其价格为$ 17.99

这是我的代码

HTML

<div class="price parbase"><div class="primary-row product-item-price product-item-price-discount"> <span class="price-value">$12.99</span><small class="js-price-value-original price-value-original">$17.99</small> </div> </div>

Scrapy python

def parse_subpage(self, response):
    item = {
    'title': response.css('h1.primary.product-item-headline::text').extract_first(),
    'sale-price': response.xpath("normalize-space(.//span[@class='price-value']/text())").extract_first(), 
    'regular-price': response.css('.js-price-value-original').xpath("@small").extract_first(),
    'photo-url': response.css('div.product-detail-main-image-container img::attr(src)').extract_first(),
    'description': response.css('p.pdp-description-text::text').extract_first()

        }   
    yield item

输出应为 正常价格:17.99美元

请帮助谢谢!

3 个答案:

答案 0 :(得分:1)

您的链接给了我404,但是通过您的html代码段,您只需要response.css('small.js-price-value-original::text').get(),就没有属性small

UPD:嗯,看来这些数据是由JS呈现的。检查页面的html代码,您将看到巨大的json,并通过whitePrice关键字进行搜索。您可以使用response.xpath('//script[contains(text(), "whitePrice")]/text()').re_first("'whitePrice'\s?:\s?'([^']+)'")

检索此类数据

答案 1 :(得分:0)

如果只有您拥有此html,则可以这样做:

def parse_subpage(self, response):
    item = {
    'title': response.css('h1.primary.product-item-headline::text').extract_first(),
    'sale-price': response.xpath("normalize-space(.//span[@class='price-value']/text())").extract_first(),
    'regular-price': response.xpath('//div/small[contains(@class, "js-price-value-original") and contains(@class, "price-value-original")]/text()').extract_first(),
    'photo-url': response.css('div.product-detail-main-image-container img::attr(src)').extract_first(),
    'description': response.css('p.pdp-description-text::text').extract_first()

        }   
    yield item

顺便说一句,您提供的网站显示了file not found

答案 2 :(得分:0)

感谢@vezunchik。如果要使用CSS选择器。您可以使用以下代码

response.css('script:contains("whitePrice")').re_first("'whitePrice'\s?:\s?'([^']+)'")