我需要从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美元
请帮助谢谢!
答案 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?'([^']+)'")