scrapy xpath:选择器有很多

时间:2014-10-14 06:28:51

标签: xpath scrapy

您好我想问一个问题

我用xpath抓了一个网站,结果是这样的:

[u'<tr>\r\n                    
    <td>address1</td>\r\n                    
    <td>phone1</td>\r\n                    
    <td>map1</td>\r\n                  
  </tr>',
 u'<tr>\r\n
    <td>address1</td>\r\n                
    <td>telephone1</td>\r\n             
    <td>map1</td>\r\n
  </tr>'...
u'<tr>\r\n
    <td>address100</td>\r\n                
    <td>telephone100</td>\r\n             
    <td>map100</td>\r\n
  </tr>']

现在我需要使用xpath再次分析这个结果 我想保存第一个地址,第二个保存到电话,最后一个保存到地图
但我无法得到它。

请指导我。谢谢!

这是代码,这是错误的。它会抓住另一件事。

store =   sel.xpath("")
for s in store:     
    address = s.xpath("//tr/td[1]/text()").extract()
    tel = s.xpath("//tr/td[2]/text()").extract()
    map = s.xpath("//tr/td[3]/text()").extract()

1 个答案:

答案 0 :(得分:4)

正如您在scrappy documentation中看到的那样,使用相对XPath,您必须使用.//表示法来提取相对于前一个XPath的元素,如果不是,您将再次获取所有元素整个文件。您可以在我上面引用的碎片文档中看到此示例:

  

例如,假设您要提取<p>元素内的所有<div>元素。首先,您将获得所有<div>元素:

     

divs = response.xpath('//div')

     

首先,您可能会尝试使用以下方法,这是错误的,因为它实际上从文档中提取所有<p>元素,而不仅仅是<div>个元素中的元素:

     

for p in divs.xpath('//p'):#这是错误的 - 从整个文档中获取所有<p>

     

这是正确的方法(请注意.//p XPath前缀的点:

     

for p in divs.xpath('.//p'):#提取

中的所有<p>

所以我认为在你的情况下你的代码必须是这样的:

for s in store:     
    address = s.xpath(".//tr/td[1]/text()").extract()
    tel = s.xpath(".//tr/td[2]/text()").extract()
    map = s.xpath(".//tr/td[3]/text()").extract()

希望这有帮助,