以下是该网站的源码:
<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]
这样,我得到了字符串'hello',我也尝试了字符串(.),但得到了<p>
中的所有字符串,而不是我想要的结果。请告诉我在这种情况下如何只得到4.2。
发布于 2016-09-12 14:04:58
我不太了解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
发布于 2016-09-12 15:54:25
您位于<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'
https://stackoverflow.com/questions/39443136
复制相似问题