如何使用纯JS抓取表的第n列的值
How to scrape the values of the n-th column of a table with pure JS?
我一直在网站上寻找这个答案,但所有的答案似乎都是jQuery特定的。
我正在使用Casper JS构建一个scraper,我找不到正确的方法来选择列n的值,其中n是我指定的任意数字。
我是这样选择表格的:
document.querySelector('table.table-responsive.table-noborder');
,我得到了一个表元素,但从那里,我不知道如何向前移动,以获得特定列的内容,而不必迭代整个表(这是我最终做的,以获得数据)
谢谢!
您可以使用document.getElementsByTagName('table')[m]
访问相关的第m个索引表。
同样,您可以遍历表内部,并通过innerHTML或nodeValue
获取文本内容。document.getElementsByTagName('table')[2].getElementsByTagName('tr')[1].childNodes[0].innerHTML
document.getElementsByTagName('table')[2].getElementsByTagName('tr')[1].childNodes[0].nodeValue
您可以编写自己的函数,很好地插入到casper中。这将遍历所有行中的第n个td
或th
,并将innerText属性的值写入结果数组:
casper.tableColumnText = function(tableSelector, columnNumber, withHeader, merged){
// columnNumber starts with 1
var texts = this.evaluate(function(tableSelector, columnNumber, withHeader){
var headerFields = document.querySelectorAll(tableSelector + " > thead > tr > th:nth-child("+columnNumber+")"),
bodyFields = document.querySelectorAll(tableSelector + " > tbody > tr > td:nth-child("+columnNumber+")"),
result = [];
if (withHeader) {
Array.prototype.forEach.call(headerFields, function(headerField){
result.push(headerField.innerText);
});
}
Array.prototype.forEach.call(bodyFields, function(bodyField){
result.push(bodyField.innerText);
});
return result;
}, tableSelector, columnNumber, withHeader);
if (merged) {
return texts.join(' ');
}
return texts;
};
tbody
将被浏览器(幻影)注入,即使它不存在于原始标记中。
相关文章:
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 使用JS将数组转换为json对象
- 如何使用js将SNAPSHOT内部版本号转换为3位数的整数
- 使用 js 将背景图像设置为 HTML
- 使用JS查找数组的平均值
- 如何使用JS/nightwatchjs并行运行多个测试
- 使用JS在服务器上运行PHP脚本
- 使用JS函数来使用另一个函数的语法?node.js
- 如何使用JS禁用表行,并在MYSQL中插入所选选项
- 为什么可以't PHP查找可以使用JS或jQuery访问的元素
- 如何使用js自动登录
- 使用JS/NodeJS测试并读取文件中的变量
- 使用js或extjs访问对象的java列表
- 使用JS加载HTML元素
- 使用JS和PHP通过锚标记传递值
- 使用JS从选择和文本输入中捕获值,并将输出返回到HTML
- 使用JS和JQuery播放和停止声音
- 使用JS按顺序显示图像,而不是随机显示
- 使用js/jQuery检查对象(而不是元素)是否真的存在
- 如何使用JS/jQuery在另一个网站上显示iframe中的特定内容