使用Ruby+XPath抓取图片src属性无返回结果求助
解决Ruby XPath提取图片src属性的问题
看起来你是想从这段HTML里提取<img>标签的src属性,但现有代码的定位方向和目标不对,所以没得到预期结果。我来帮你梳理下问题和解决方案:
首先分析你现有代码的问题
- 第一行
tr.xpath("./td[1]//a[img]").text是在获取<a>标签内的文本内容(也就是示例里的1231233),和你要的图片src完全无关。 - 第二行
tr.xpath("./td[1]//a[img]/@href").extract是在提取<a>标签的href属性,同样不是目标的图片src。 - 另外如果没有返回结果,也可能是你的
tr节点没有正确定位到(比如HTML里这个<td>的父节点不是你选中的tr,或者td[1]的索引不对)。
正确的解决方案(基于Nokogiri,Ruby常用HTML解析库)
假设你已经用Nokogiri加载了HTML文档,先确保父节点定位正确,然后调整XPath直接指向<img>的src属性:
场景1:你已经正确获取到包含该<td>的tr节点
# 提取单个img的src属性文本 img_src = tr.xpath('./td[1]//img/@src').text puts img_src # 输出: gwt/placeholder_icon_24.png # 如果可能有多个img,用extract返回数组 img_srcs = tr.xpath('./td[1]//img/@src').extract puts img_srcs # 输出: ["gwt/placeholder_icon_24.png"]
场景2:你直接处理这段<td>的HTML片段
如果你的HTML只有这段<td>内容,不需要通过tr定位,可以直接从<td>开始:
require 'nokogiri' html = '<td class="E6AEBFB-Zc-a E6AEBFB-Zc-s E6AEBFB-Zc-d"><div style="outline-style:none;" __gwt_cell="cell-gwt-uid-338"><a aria-label="Application 1231233" href="#AppDashboardPlace:p=tmp.13910559381666913670.1525434997761&amp;appid=4973853232983868726" data-column="TITLE"><img src="gwt/placeholder_icon_24.png" role="presentation"><div> <div>1231233</div> <div></div> </div> </a></div></td>' doc = Nokogiri::HTML(html) td = doc.at_xpath('//td') img_src = td.xpath('.//img/@src').text puts img_src
额外提示
- 如果你不确定节点是否存在,可以先打印定位到的节点内容,确认路径是否正确:比如
puts tr.xpath('./td[1]').to_html,看看是否能输出目标<td>的HTML。 - XPath里的
./表示当前节点下,//表示后代节点,@src表示提取该属性的值。
内容的提问来源于stack exchange,提问作者Bolo
相关产品推荐
相关产品推荐

