使用python scrapy a websi时无法获取<p>的文本

2024-10-03 09:09:11 发布

您现在位置:Python中文网/ 问答频道 /正文

以下是网站的html源代码:

      <p class="fc-gray">
           hello
       <span class="">2010-10</span> 
       <em class="shuxian">|</em>
             4.2                 
      </p>

我想得到值4.2。 下面是我的代码(carinfo div是xpath元素选择器):

        miles = carInfoDiv.xpath("p[contains(@class,'fc-gray')]/text()").extract()[0]

这样,我得到了字符串“hello”,我也尝试了字符串(.),但是得到了<p>中的所有字符串,而不是我想要的结果。请告诉我如何得到只有4.2在这种情况下


Tags: 字符串代码divhello源代码网站htmlxpath
2条回答

我不太懂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

您位于<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'

相关问题 更多 >