在两个 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_rejected
或 selectorgadget_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()
我正在抓取网页,想获取首页所有产品的价格信息。下面是网络的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_rejected
或selectorgadget_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()