我正在尝试解析一个网页,我正试图从中提取一些网址。
[...]
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>
这不是我期待的结果。我该怎么做才能解决这个问题?提前致谢。
发生错误是因为您传递给Xml服务服务的内容不是XHTML所以,问题的一种解决方法是
如何使用Google Apps脚本将HTML转换为XHTML?
Google Apps脚本不包含执行此操作的内置服务,因此您可以尝试使用对某些标记错误“容忍”的弃用Xml服务。
另一种方法是使用JavaScript字符串处理技术,例如使用正则表达式。
有关详细信息,请参阅What is the best way to parse html in google apps script。