scrapy xpath:具有多个<;tr>&书信电报;td>;
你好,我想问一个问题 我用xpath创建了一个网站,结果如下: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>'
[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()