2015-10-06 46 views
1

我有一个<BODY>内这段HTML代码,我试图用scrapy选择:HTML的Xpath查询 - 我做错了什么?

<section class="content"> 
    <div class="social clearfix"> 
     <div class="profile profile-nano pull-left"> 
      <a href="https://xxx" title="xxx"> <img src="/xxx" class="avatar" height="48" width="48" title="xxx" alt="xxx"> </a> 
     </div> 
     <p class="byline pull-left text-left"><strong>BY <a class="text-uppercase" href="https://xxx">xxx</a><br /> 
      September 07, 2015</strong> </p> 

这是XPath选择我使用来获得日期:

response.selector.xpath('//p/@byline/text()') 

哪返回空结果。

我在xpath选择器中做错了什么?因为在这里你基本上是试图从一个p元素和提供p元素的byline属性没有byline属性

回答

2

//p/@byline/text()将匹配什么。

你可以得到a元以下同级的有bylinediv的元素:

In [1]: response.xpath("//p[contains(@class, 'byline')]//a/following-sibling::text()").extract()[0].strip() 
Out[1]: u'September 07, 2015' 

或者,您可以从相应的p元素得到所有的文本节点,并通过筛选出所需的一个通过re:test() function以正则表达式模式检查它:

In [2]: response.xpath("//p[contains(@class, 'byline')]//text()[re:test(., '\w+ \d{2}, \d{4}')]").extract()[0].strip() 
Out[2]: u'September 07, 2015'