我在使用XPath选择器时遇到了无法获取所有信息的问题。该行处于开发人员模式。这是
<address class="location-row-address" data-qa-target="provider-office-address">
230 W 13th St Ste 1b<!--
--> <!--
-->New York<!--
-->, <!--
-->NY<!--
--> <!--
-->10011<!--
-->
</address>
我使用的XPath选择器是
response.xpath('//*[@id="summary-section"]/div[1]/div[2]/div/div/div[2]/div[1]/address/text()').get()
我得到的结果是
230 W 13th St Ste 1b
我期待的结果是
230 W 13th St Ste 1b New York, NY 10011
我正在用scrapy刮。谢谢。你的帮助是感激不尽的。
编辑:我所面临的上述问题得到了解决,我使用了string()方法和get()从元素节点获取所有字符串。
response.xpath('string(//*[@id="summary-section"]/div[1]/div[2]/div/div/div[2]/div[1]/address)').get()
1条答案
按热度按时间myss37ts1#
您的XPath表达式会传回
address
元素子系的所有文字节点。有数个文字节点,并以注解节点分隔!回到Python,对结果调用
get()
方法,结果只返回节点集的 first 节点。.get()总是返回一个结果;如果有多个匹配,则返回第一个匹配的内容;如果没有匹配项,则返回None。.getall()返回包含所有结果的列表。https://docs.scrapy.org/en/latest/topics/selectors.html
如果调用
getall()
方法,则会检索到一个字符串列表,然后可以将它们连接起来生成所需的文本。但更简单的方法是使用XPath函数string
来获取address
元素的“字符串值”。在XPath 1.0规范中,它是这样定义元素节点的字符串值的:元素节点的string-value是元素节点的所有文本节点后代的string-value按文档顺序的串联。
https://www.w3.org/TR/1999/REC-xpath-19991116/#element-nodes
将此函数应用于
address
元素将返回一个字符串值,然后可以使用Scrapy中的get()
方法访问该值: