Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
scrapy xpath:具有多个<;tr>&书信电报;td>;_Xpath_Scrapy - Fatal编程技术网

scrapy xpath:具有多个<;tr>&书信电报;td>;

scrapy xpath:具有多个<;tr>&书信电报;td>;,xpath,scrapy,Xpath,Scrapy,你好,我想问一个问题 我用xpath创建了一个网站,结果如下: [u'<tr>\r\n <td>address1</td>\r\n <td>phone1</td>\r\n <td>map1</td>\r\n </tr>'

你好,我想问一个问题

我用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,您必须使用
/
符号来提取相对于上一个XPath的元素,否则将再次从整个文档中获取所有元素。您可以在我上面提到的报废文档中看到此示例:

例如,假设要提取
元素中的所有
元素。首先,您将获得所有
元素:

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

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

divs.xpath(“//p”)中p的
#这是错误的-从整个文档中获取所有

这是正确的方法(注意
//p
XPath前面的点):

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()

希望这有帮助,

谢谢!你是对的。但是我有一个问题。我使用了
s.xpath(“.//td[1]/text()”).extract()[0]
,它是有效的。但是
s.xpath(“.//tr/td[1]/text()”).extract()
不起作用。你知道为什么吗?不客气
:)
。我不确定,但是这个
s.xpath(“.//tr/td[1]/text()”).extract()
不起作用,因为
s
元素可能已经在
节点中,所以您不需要再次引用此节点。
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()