在两个 span scrapy 之间抓取数据

Scraping data between two spans scrapy

我正在抓取网页,想获取首页所有产品的价格信息。下面是网络的html。我要99.

<div class = 'item-bg'>
    <div class = 'product-box'>
        <div class = 'res-info'>
            <div class = 'price-box'>
                <span class = 'def-price selectorgadget_rejected'>
                    <i>$</i>
                    99
                    <i>.99</i>
                </span>
            </div>
        </div>
    </div>
</div>

我认为我不能使用 def-price class,因为有些产品有 'selectorgadget_rejected',有些产品后面有 'selectorgadget_suggested'。 我现在的代码是

product_info = response.css('.item-bg')
for product in product_info:
    product_price_sn = product.css('.price-box').extract() 

它没有达到 99,我不确定如何解决它。有什么想法吗?

这是完整 HTML 信息的屏幕截图:

与 CSS 相比,我总是更喜欢使用 XPath。在 XPath 中,您可以使用 contains 函数来指定您想要 select 的 class,例如:

response.xpath('//span[contains(@class, "def-price selectorgadget")]//text()').extract() 
  • 这将从 ALL 页面中的 <span> 标签中提取文本 class 包含表达式 def-price selectorgadget 无论它是 selectorgadget_rejectedselectorgadget_suggested.

或使用 select 前 product_info:

product_info = response.css('.item-bg')
for product in product_info:
    product_price_sn = product.xpath('div/div/div/span[contains(@class, "def-price selectorgadget")]//text()').extract() 

使用完整路径,因为只发布了 HTML 的片段

如果你只想要 99 outside<i> 标签使用 /text() 而不是 //text()


CSS 选择器

现在,如果您想坚持使用 CSS select 或者,这个 可能 有效:

product.css('.price-box span::text').extract()