gpt4 book ai didi

javascript - 在 Node.js 中解析没有 ID 或 CSS 选择器的 HTML 表格

转载 作者:搜寻专家 更新时间:2023-10-31 23:02:16 25 4
gpt4 key购买 nike

此数据来自旧系统,输出原样。我们不能添加 CSS 选择器或 ID。大多数在线 node.js 解析示例都涉及解析表、行、具有某些 ID 或 CSS 类的数据,但到目前为止我还没有遇到任何可以帮助解析下面页面的东西。这包括 JSDOM (AFAIK) 的示例。

我想要的是将每一行提取到 [fileName, link, size, dateTime] 元组中,然后我可以在这些元组上运行一些查询,比如组中的最新时间戳是什么,等等,然后提取文件名和链接 - 正在考虑使用 YQL。交替的表格行属性也让它有点挑战。 node.js 的新手,所以一些术语可能是错误的。任何帮助将不胜感激。

谢谢。

<html>
<body>
<table width="100%" cellspacing="0" cellpadding="5" align="center">
<tr>
<td align="left"><font size="+1"><strong>Filename</strong></font></td>
<td align="center"><font size="+1"><strong>Size</strong></font></td>
<td align="right"><font size="+1"><strong>Last Modified</strong></font></td>
</tr>
<tr>
<td align="left">&nbsp;&nbsp;
<a href="/path_to_file.csv"><tt>file1.csv</tt></a></td>
<td align="right"><tt>86.6 kb</tt></td>
<td align="right"><tt>Fri, 21 Mar 2014 21:00:19 GMT</tt></td>
</tr>
<tr bgcolor="#eeeeee">
<td align="left">&nbsp;&nbsp;
<a href="/path_to_file.csv"><tt>file2.csv</tt></a></td>
<td align="right"><tt>20.7 kb</tt></td>
<td align="right"><tt>Fri, 21 Mar 2014 21:00:19 GMT</tt></td>
</tr>
<tr>
<td align="left">&nbsp;&nbsp;
<a href="/path_to_file.xml"><tt>file1.xml</tt></a></td>
<td align="right"><tt>266.5 kb</tt></td>
<td align="right"><tt>Fri, 21 Mar 2014 21:00:19 GMT</tt></td>
</tr>
<tr bgcolor="#eeeeee">
<td align="left">&nbsp;&nbsp;
<a href="/path_to_file.xml"><tt>file2.xml</tt></a></td>
<td align="right"><tt>27.2 kb</tt></td>
<td align="right"><tt>Fri, 21 Mar 2014 21:00:19 GMT</tt></td>
</tr>
</table>
</body>
</html>

回答(感谢@Enragedmrt):

    res.on('data', function(data) {

$ = cheerio.load(data.toString());
var data = [];
$('tr').each(function(i, tr){

var children = $(this).children();
var fileItem = children.eq(0);
var linkItem = children.eq(0).children().eq(0);
var lastModifiedItem = children.eq(2);

var row = {
"Filename": fileItem.text().trim(),
"Link": linkItem.attr("href"),
"LastModified": lastModifiedItem.text().trim()
};
data.push(row);
console.log(row);
});
});

最佳答案

我建议使用 Cheerio优于 JSDOM,因为它明显更快、更轻便。也就是说,您需要为每个循环执行一个操作,以获取“tr”元素以及随后的“td”元素。这是一个粗略的示例(我的 Node.js/Cheerio 已经生锈了,但是如果您深入研究 JQuery,您可以找到一些不错的示例):

var data = [];
$('tr').each(function(i, tr){
var children = $(this).children();
var row = {
"Filename": children[0].text(),
"Size": children[1].text(),
"Last Modified": children[2].text()
};
data.push(row);
});

关于javascript - 在 Node.js 中解析没有 ID 或 CSS 选择器的 HTML 表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22569670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com