Scrapy使用XPath选择器无法获取元素完整文本的解决方案
Scrapy XPath选择器无法获取元素完整文本问题
问题复现
使用Scrapy框架做网页数据爬取时,调用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
问题原因
XPath的text()表达式只会选取目标元素下的独立直接文本节点,上述地址内容被多个HTML注释节点切割为多段独立文本,直接调用text()后接get()只会返回匹配到的第一个文本节点,无法获取被注释分隔的其余文本内容。
解决方案
使用XPath的string()方法包裹目标元素节点,该方法会自动拼接指定元素节点下的所有字符串内容,配合get()方法即可获取完整文本,修正后的XPath语句如下:
response.xpath('string(//*[@id="summary-section"]/div[1]/div[2]/div/div/div[2]/div[1]/address)').get()
内容的提问来源于stack exchange,提问作者Shahidul Islam Pranto
相关产品推荐
相关产品推荐

