Google Sheets中IMPORTXML抓取报错与文本截取问题求助
IMPORTXML返回#N/A错误原因及按钮识别修复方案
你当前使用的XPath是从根节点逐层数标签序号的绝对路径,这是功能时灵时不灵、最终返回N/A的核心原因:
- 电商网站会频繁调整前端DOM结构:新增cookie提示条、促销弹窗、活动banner时,都会改变body下div的排列序号,你写死的
div[7]可能变成div[8]、div[6],直接导致路径匹配不到目标元素。 - 不要靠数标签层级定位元素,改用元素自带的功能属性做相对定位,稳定性会大幅提升。
替换成以下公式抓取按钮文本即可,不会因为前端层级小幅调整失效:
=IMPORTXML("https://www.smythstoys.com/uk/en-gb/video-games-and-tablets/gaming-merchandise/harry-potter-lumos-logo-light/p/209816","//button[contains(@class,'product-action') or contains(@class,'add-to-cart')]")
返回结果如果是pre-order就是预售状态,是add to basket就是可直接加购的现货状态。
注:偶尔返回错误是网站对表格内置请求的反爬拦截,属于站点侧限制,没有100%规避方案,属性相对定位已经能把成功率提升到90%以上。
提取到货日期片段的实现方案
你不需要修改原有的IMPORTXML抓取逻辑,直接套文本截取函数,把固定前缀去掉即可。
如果原抓取公式写在A1单元格,使用以下公式即可直接提取August 2022格式的到货时间:
=MID(A1,FIND("Expected Stock ",A1)+15,99)
如果不想占用额外单元格,也可以直接把A1替换成你原来的IMPORTXML公式嵌套使用,下面的写法同时把原公式里数序号的绝对XPath换成了类名相对定位,能进一步降低N/A报错概率:
=MID(IMPORTXML("https://www.smythstoys.com/uk/en-gb/video-games-and-tablets/gaming-merchandise/harry-potter-lumos-logo-light/p/209816","//form//td[contains(@class,'stock-message')]"),FIND("Expected Stock ",IMPORTXML("https://www.smythstoys.com/uk/en-gb/video-games-and-tablets/gaming-merchandise/harry-potter-lumos-logo-light/p/209816","//form//td[contains(@class,'stock-message')]"))+15,99)
内容的提问来源于stack exchange,提问作者Kathryn Gratton
相关产品推荐
相关产品推荐

