我正在尝试解析 HTML 页面并生成一个对象,该对象与我使用浏览器 Web 开发人员工具检查 HTML 时所看到的等效。 (Firefox 或 Chrome)。
网页包含一些URL,它们是下载链接,但我想整理页面上所有下载链接的列表。我尝试了多种方法来实现此目的,但每种方法仅提供仅包含部分信息的对象。到目前为止,我做得最好的就是使用 Tagsoup。
def tagsoupParser = new org.ccil.cowan.tagsoup.Parser()
def slurper = new XmlSlurper(tagsoupParser)
def htmlParser = slurper.parse("https://www.2n.com/en_US/support/documents/firmware#filter-category-intercoms")
htmlParser.'**'.findAll{it}.each {
new File("myFile.txt") << XmlUtil.serialize( it )
}
这在一定程度上有效,但令人烦恼的是,HTML 在网页中的 URL 所在部分之前停止,并且我没有获得完整的 HTML。如果您在浏览器中使用 Web 开发人员工具,并将检查视图与 myFile.txt 中的内容进行比较,它的比较结果非常好,直到文件中的 HTML 停止,我错过了整个 HTML 块。 (我需要的部分!)。
我也尝试了这段代码,它给出了类似的结果:-
def parser = new org.cyberneko.html.parsers.SAXParser()
new XmlParser( parser ).parse( 'https://www.2n.com/en_US/support/documents/firmware#filter-category-intercoms' ).with { page ->
page.'**'.DIV.grep {it}.each { it ->
new File("myFile.txt") << XmlUtil.serialize( it )
}
}
所以这也不起作用。我也尝试了其他一些方法,但没有一个能给出我想要的,而且它们都达不到我上面详细介绍的两种。
网页中嵌入的是这一行,我需要提取这样的行(以及其他类似的行):-
<a target="_blank" href="/en_US/documents/22902/461984/Firmware+2.42.0++-+2N+IP+Verso%2C+Solo%2C+LTE+Verso" class="p2n-btn p2n-btn-inverse p2n-btn-download p2n-bottom-info-link p2n-btn-fs-mini p2n" title="Download file"> </a>
我正在使用 Grails 2.5.6 / Groovy,但如果可以的话我很乐意使用本机 Java。
如果您查看该页面的源代码,我不相信它包含您正在查找的任何链接。
如果您在网络选项卡打开的情况下将其加载到浏览器中,您可以看到加载主页后,它会向
发出第二个请求(通过 javascript)我相信这包含您正在寻找的 HTML