有时会有从网页上的表格获取数据进行分析的需求,比如:
因为数据混杂在 HTML 里,没有 API,想要获取第二列的 rrname
就比较麻烦。
常规思路是 lxml
或者 BeautifulSoup
之类的库解析 HTML 从中提取数据,当然正则就算了…
不过对于这种简单的需求,其实有个很方便的办法。
Chrome 的 DevTools
自带获取元素 XPath
的功能,在 Elements
里右键单击目标元素,点 Copy - Copy XPath
就行。
然后在 Console
里用 $x()
函数就可以根据 XPath 定位元素了。
但有点坑的是这里的 td
里还有 ul
:
所以若是用 $x('/html/body/table/tbody/tr/td[2]')
的话,它的 innerText
会包含 ul 里的值。如图,多了 ul 里的 S D
:
查看 XPath 的语法,发现用 node()
可以匹配任意节点:
于是用 $x('/html/body/table/tbody/tr/td[2]/node()[1]')
就能获取到期望的 rrname 了:
把 rrname 放进 domains 数组里:
var domains = [];
$x('/html/body/table/tbody/tr/td[2]/node()[1]').forEach(function(e){domains.push(e.data)})
然后复制到系统剪贴板:
copy(domains.join(''))
也可以用 Scrapy
写个爬虫,以后遇到这种需求改改需要爬取的 URL 就行。
另外 Burp Suite
的 Intruder
有个 Grep - Extract
的选项, 可视化正则还是蛮好用的。
参考:
chrome 爬页面上表格某列的数据