scrapy 如何在使用xpath选择器时抓取整个信息

afdcj2ne  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(141)

我在使用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()
myss37ts

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()方法访问该值:

response.xpath(
   'string(//*[@id="summary-section"]/div[1]/div[2]/div/div/div[2]/div[1]/address)'
).get()

相关问题