我需要解析表格数据到我的电子表格,日志中没有错误,但电子表格中的单元格是空的。html网站的结构看起来像这样:
<html>
<head>
<title>TITLE AAAAA</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta content="IE=EmulateIE7" http-equiv="X-UA-Compatible">
<style type="text/css">
body {
font-size: 12px;
font-family: Arial
}
td {
font-size: 12px;
line-height: 20px;
font-family: Arial
}
</style>
<script type="text/javascript" language="javascript" src="Function.js"></script>
</head>
<body>
<p align="center">
<b>AAAA: AAAAAA</b>
</p>
<table width="300" border="0" align="center" cellpadding="1" cellspacing="1" bgcolor="#0066cc">
<tbody>
<tr align="center" bgcolor="#333399" class="font13">
<td width="150">
<b>
<font color="#ffffff">TO_CELL_A1_TEXT</font>
</b>
</td>
<td width="150">
<b>
<font color="#ffffff">TO_CELL_B1_TEXT</font>
</b>
</td>
<td width="150">
<b>
<font color="#ffffff">TO_CELL_C1_TEXT</font>
</b>
</td>
<td width="150">
<b>
<font color="#ffffff">TO_CELL_D1_TIME_TEXT</font>
</b>
</td>
</tr>
<tr align="center" bgcolor="#FFFFFF">
<td height="20">
<b>
<font color="red">TO_CELL_A2_TEXT</font>
</b>
</td>
<td>
<b>
<font color="red">TO_CELL_B2_TEXT</font>
</b>
</td>
<td>
<b>
<font color="red">TO_CELL_C2_TEXT</font>
</b>
</td>
<td>
<script>
showtime(2023, 01 - 1, 13, 23, 01, 12)
</script>"TO_CELL_D2_TIME_TEXT"
</td>
</tr>
</tbody>
</table>
<br>
<p align="center">SITE_NAME</p>
</body>
</html>
我改进了我的代码:
function importParsedData(){
var html = UrlFetchApp.fetch('http://siteurl.com').getContentText();
html = html.replace(/(<(?=link|meta|br)[^>]*)(?<!\/)>/ig, '$1/>');
html = html.replace(/&(?!amp;)/ig, '&');
html = html.replace(/ /g, " ");
html = html.replace(/<table[^>]*>/ig, "<table>");
html = html.replace(/<tr[^>]*>/ig, "<tr>");
html = html.replace(/width[^>]*>/ig, "<width>");
html = html.replace(/<td[^>]*>/ig, "<td>");
html = html.replace(/<font[^>]*>/ig, "<font>");
var doc = XmlService.parse(html);
var root = doc.getRootElement().getChild("body");
var table = root.getChild("table");
var rows = table.getChildren("tr");
var sheet = SpreadsheetApp.getActive().getSheetByName("IMPORTED_DATA");
var rowIndex = 1;
for (var i = 0; i < rows.length; i++) {
var cells = rows[i].getChildren("td");
for (var j = 0; j < cells.length; j++) {
var cellValue = cells[j].getText();
sheet.getRange(rowIndex, j+1).setValue(cellValue);
}
rowIndex++;
}
}
如果在上面的代码中对于一个简单的情况没有解决问题的方法,我将遵循其他用户链接的建议。我也将使用regex代替,但我想知道为什么我的代码现在不起作用。
1条答案
按热度按时间0sgqnhkj1#
这段代码没有导入任何内容,因为它正在查找
<tr>
作为<table>
的子项,但是,假设问题中包含的HTML是服务器给出的响应,则它们是<tbody>
的子项。作者
还有更优雅的解决方案,如使用专门的库解析HTML/XML文档,但在开始使用它们之前,您应该花一些时间学习Google Apps脚本和文档对象模型(DOM)的基础知识。
相关