使用python scrapy网站

时间:2016-09-12 03:53:59

标签: python scrapy

以下是该网站的源代码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。

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'