以下是该网站的源代码html代码:
<p class="fc-gray">
hello
<span class="">2010-10</span>
<em class="shuxian">|</em>
4.2
</p>
我想得到4.2的值。 以下是我的代码(carInfoDiv是一个xpath元素选择器):
miles = carInfoDiv.xpath("p[contains(@class,'fc-gray')]/text()").extract()[0]
通过这种方式,我得到了字符串&#39; hello&#39;,我也尝试了字符串(。),但是得到了<p>
中的所有字符串,而不是我想要的结果。请告诉我如何在这种情况下只获得4.2。
答案 0 :(得分:0)
我不太了解xpath。但正则表达可能会帮助你
这不是那么优雅,但会对你有用
>>> import re
>>> html = """
<p class="fc-gray">
hello
<span class="">2010-10</span>
<em class="shuxian">|</em>
4.2
</p>
"""
>>> search = re.search('em>[\n\s]*(?P<result>[\d.]+).*', html, flags=re.DOTALL)
>>> if search:
... print(search.group('result'))
...
4.2
答案 1 :(得分:0)
您在<P>
元素的最后一个文本子项之后,因此您可以在XPath表达式中添加[last()]
谓词:
>>> import scrapy
>>> s = scrapy.Selector(text=""" <p class="fc-gray">
... hello
... <span class="">2010-10</span>
... <em class="shuxian">|</em>
... 4.2
... </p>""")
>>> s.xpath('.//p[@class="fc-gray"]/text()[last()]')
[<Selector xpath='.//p[@class="fc-gray"]/text()[last()]' data='\n 4.2 \n '>]
>>> s.xpath('.//p[@class="fc-gray"]/text()[last()]').extract_first()
'\n 4.2 \n '
>>> s.xpath('.//p[@class="fc-gray"]/text()[last()]').extract_first().strip()
'4.2'
>>>> # alternative using XPath's normalize-space() to do the whitespace stripping
>>> s.xpath('normalize-space(.//p[@class="fc-gray"]/text()[last()])').extract_first()
'4.2'