获取两个 i 标签之间信息的 CSS 选择器或 XPath?

标签 css xpath web-scraping scrapy web-crawler

我正在尝试抓取价格信息,网站的 HTML 如下所示

<span class="def-price" datasku='....'>
   <i>$</i>
   "999"
   <i>.00<i>
</span>

我想得到 999。(我不想要美元符号或 .00)我现在有

product_price_sn = product.css('.def-price i').extract()

我知道这是错误的,但不确定如何解决。知道如何抓取价格信息吗?谢谢!

最佳答案

你可以使用这个xpath //span[@class="def-price"]/text()

确保您使用的是 /text() 而不是 //text()。否则它将返回 span 标签内的所有文本节点。

这个 css 选择器 .def-price::text。使用css选择器时不要使用.def-price::text,它会像xpath中的//text()一样返回所有文本节点。

使用 scrapy response.xpath 对象

from scrapy.http import Request, HtmlResponse as Response

content = '''<span class="def-price" datasku='....'>
   <i>$</i>
   "999"
   <i>.00<i>
</span>'''.encode('utf-8')

url = 'https://stackoverflow.com/questions/62849500'

''' mocking scrapy request object '''
request = Request(url=url)

''' mocking scrapy response object '''
response = Response(url=url, request=request, body=content)

''' using xpath  '''

print(response.xpath('//span[@class="def-price"]/text()').extract())
# outputs ['\n   ', '\n   "999"\n   ']

print(''.join(response.xpath('//span[@class="def-price"]/text()').extract()).strip())
# outputs "99"

''' using css selector '''

print(response.css('.def-price::text').extract())
# outputs ['\n   ', '\n   "999"\n   ']

print(''.join(response.css('.def-price::text').extract()).strip())
# outputs "99"

查看实际效果 here

使用 lxml html 解析器

from lxml import html

parser = html.fromstring("""
<span class="def-price" datasku='....'>
   <i>$</i>
   "999"
   <i>.00<i>
</span>
"""
)

print(parser.xpath('//span[@class="def-price"]/text()'))
# outputs ['\n   ', '\n   "999"\n   ']

print(''.join(parser.xpath('//span[@class="def-price"]/text()')).strip())
# outputs "999"

查看实际效果 here

关于获取两个 i 标签之间信息的 CSS 选择器或 XPath?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62849500/

相关文章:

android - 从网站提取特定文本 block 到 Android 应用程序

javascript - 从 csv 文件中排除显示的某些值

Python:在 lxml.cssselect 中使用的 CSS 选择器

xslt - XSL输出超出预期

具有通配符属性名称和特定属性值的 C# 和 XPath

python - Beautiful Soup 中 find_all 方法的返回类型是什么?

python - 在这种情况下提取数据最有效的方法是什么?

html - 如何根据base64给笔画一个特定的宽度

html - 如何从 -moz-appearance 按钮中删除背景

bash - 如何选择元素后面的文本?