我正在尝试使用Google应用脚本中的此脚本解析html
someone
gmail.com
但它说:
第27行出错:元素类型" scr"必须遵循属性规范,">"或" />"。 (第4行,文件"")
我正在尝试解析html,然后使用上面的getElementById函数。 任何想法?
答案 0 :(得分:2)
我发现在Google应用中解析html的最佳方法是避免使用XmlService.parse或Xml.parse。 XmlService.parse不能很好地处理某些网站的错误HTML代码。
这是一个基本的例子,说明如何在不使用XmlService.parse或Xml.parse的情况下轻松解析任何网站。在这个例子中,我从“wikipedia.org/wiki/President_of_the_United_States”中检索总统列表 使用常规的javascript document.getElementsByTagName(),并将值粘贴到我的Google电子表格中。
1-创建新的Google表格;
2-点击菜单工具>脚本编辑器...使用代码编辑器窗口打开一个新选项卡,并将以下代码复制到Code.gs中:
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu("Parse Menu")
.addItem("Parse", "parserMenuItem")
.addToUi();
}
function parserMenuItem() {
var sideBar = HtmlService.createHtmlOutputFromFile("test");
SpreadsheetApp.getUi().showSidebar(sideBar);
}
function getUrlData(url) {
var doc = UrlFetchApp.fetch(url).getContentText()
return doc
}
function writeToSpreadSheet(data) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var row=1
for (var i = 0; i < data.length; i++) {
var x = data[i];
var range = sheet.getRange(row, 1)
range.setValue(x);
var row = row+1
}
}
3-将HTML文件添加到Apps脚本项目中。打开脚本编辑器,然后选择文件&gt;新&gt; Html文件,并将其命名为'test'。然后将以下代码复制到test.html
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<input id= "mButon" type="button" value="Click here to get list"
onclick="parse()">
<div hidden id="mOutput"></div>
</body>
<script>
window.onload = onOpen;
function onOpen() {
var url = "https://en.wikipedia.org/wiki/President_of_the_United_States"
google.script.run.withSuccessHandler(writeHtmlOutput).getUrlData(url)
document.getElementById("mButon").style.visibility = "visible";
}
function writeHtmlOutput(x) {
document.getElementById('mOutput').innerHTML = x;
}
function parse() {
var list = document.getElementsByTagName("area");
var data = [];
for (var i = 0; i < list.length; i++) {
var x = list[i];
data.push(x.getAttribute("title"))
}
google.script.run.writeToSpreadSheet(data);
}
</script>
</html>
4-保存您的gs和html文件,然后返回电子表格。重新加载您的电子表格。单击“Parse Menu” - “Parse”。然后点击侧栏中的“点击此处获取列表”。
答案 1 :(得分:0)
要解析HTML,您必须对其进行清理,您的页面有一个脚本标记,该标记使用Javascript作为字符串编写,更具体地说:
document.write('<scr' + 'ipt src="' + src + '"></scr' + 'ipt>');})
显然,XML解析器不理解Javascript代码,所以你必须手动清理它,不是一件简单的事情,你可以构建一个简单的RegEx选择器,如:
function getElementsByID(element, idToFind) {
var regId = new RegExp( '(<[^<]*id=[\'"]'+ idToFind +'[\'"][^>]*)' );
var result = regId.exec( element );
return result[1] + '>';
}
function parse() {
var html = UrlFetchApp.fetch('http://www.merriam-webster.com/').getContentText();
var element = getElementsByID(html, 'search_box_terms');
return element; // "<input id="search_box_terms" name="query" type="text" placeholder="I'm searching for ..." value="" />"
}
这将返回您提供的ID元素的字符串。这当然是一个简单的RegEx,并不适用于所有情况,但对大多数情况都会很好。