根元素后面的文档中的标记必须格式正确 - 无法事先修复网页

问题描述 投票:0回答:1

我正在尝试解析一个网页,我正试图从中提取一些网址。

[...]
var html = UrlFetchApp.fetch('https://cse.google.com/cse?q=example&cx=006680642033474972217%3A6zo0hx_wle8#gsc.tab=0&gsc.q=example&gsc.page=1').getContentText();
var doc = XmlService.parse(html);
[...]

此代码中的URL是一个示例,将来在两次出现时,单词“example”可能是其他内容。

当我运行代码时,XmlService.parse()失败并在标题中给出错误。

我知道网页上有一些标记搞砸了。

问题是我无法修复标记一次并在其他地方解决问题,因为我必须使用URLFetchApp.fetch()给我的任何东西。

我不必解析整个文档,所以如果标记错误是我不需要实际检查的文档的一部分,我可以完全不关心它。

有没有办法自动纠正标记错误?

或者,是否可以从开头以外的某个地方开始解析(特别是从gsc-results gsc-webResult开始)?

感谢您的关注。

编辑:

通过使用Xml.Parse(),它成功解析了网页,但结果就是这样。

 <?xml version="1.0" encoding="UTF-8"?><body><noscript><h3>Google Custom Search requires JavaScript</h3><p>JavaScript is either disabled or not supported by your browser. To use Custom Search, enable JavaScript by changing your browser options and reloading this page.</p></noscript><div id="cse-hosted"><div id="cse-header"><a href="#" id="cse-logo-target" shape="rect"/><div id="cse-logo"><span class="lockup-logo"/> <span class="lockup-text"><span class="lockup-brand"> Custom Search</span></span></div><div id="cse-search-form">Loading</div></div><div id="cse-body"><div id="cse">Loading<div class="gsc-adBlock gsc-imageResult-classic gsc-imageResult-column gsc-clear-button gsc-branding hidden"/></div></div><div id="cse-footer">© 2017 Google</div></div></body>

这不是我期待的结果。我该怎么做才能解决这个问题?提前致谢。

javascript html xml google-apps-script html-parsing
1个回答
0
投票

发生错误是因为您传递给Xml服务服务的内容不是XHTML所以,问题的一种解决方法是

如何使用Google Apps脚本将HTML转换为XHTML?

Google Apps脚本不包含执行此操作的内置服务,因此您可以尝试使用对某些标记错误“容忍”的弃用Xml服务。

另一种方法是使用JavaScript字符串处理技术,例如使用正则表达式。

有关详细信息,请参阅What is the best way to parse html in google apps script

© www.soinside.com 2019 - 2024. All rights reserved.