gpt4 book ai didi

java - 使用 JSoup 解析 HTML(格式不正确)

转载 作者:行者123 更新时间:2023-12-01 14:30:07 34 4
gpt4 key购买 nike

我正在尝试使用 Jsoup 解析 HTML 页面并发现一些奇怪的问题。页面是:http://www.filmaffinity.com/en/film290741.html正如你所看到的不是 well formed 。我猜它有一些问题可能会影响解析。 通过 Firebug 和 Chrome,我获得了我要查找的元素的 XPath(页面中的 5.8 速率)。

  • Chrome 指向:/html/body/table[2]/tbody/tr/td[2]/table/tbody/tr[1]/td/table[1]/tbody/tr/td[2]/table/tbody/tr[2]/td

  • Firebug 指向:/html/body/table[2]/tbody/tr/td[2]/table/tbody/tr/td/table/tbody/tr/td[2]/table/tbody/tr[2]/TD

    唯一的区别是 1在 Chrome 中,Firebug 中不显示。我已经手动验证了路径,它是正确的。

然后我在 Jsoup 中将 xpath 转换为 CSS 查询,以便稍后提取特定元素:

Element rate=doc.select("html body table:nth-child(2) tbody tr td:nth-child(2) table tbody tr td table tbody tr td:nth-child(2) table tbody tr:nth-child(2) td") 

代码的执行并没有正确定位我,而是定位到 Firebug 在 XPath 中引用的元素,如下所示:

wrong:/html/body/table[2]/tbody/tr/td[2]/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr[15]/td[2]
right:/html/body/table[2]/tbody/tr/td[2]/table/tbody/tr/td/table/tbody/tr/td[2]/table/tbody/tr[2]/td

从最后看,第一个区别是:

/td/table/tbody/tr[15]/td[2]

它采用第一个元素而不是第二个元素。

有什么办法可以解决此类问题吗?问题是否与 html 格式不正确有关,或者我是否缺少一些其他可以用来解决此问题的 Jsoup 技术?

我选择 Jsoup 是因为它应该能够处理格式不正确的 Html。我是不是要求太高了?

Jsoup 是否有其他替代方案可以解决此类问题?

最佳答案

你就快到了!

问题是(正如您所提到的)您提供给 select() 的表达式匹配两个元素。我通过在 Chrome 开发控制台中执行 JQuery 来检查这一点。

select() 返回一个 Elements,因此您可以只访问 rate.get(1) 但这实际上读起来不太好。因此,您可以对查询进行更多的细化,以便它获得您想要的评级:

Element rate=doc.select("html body table:nth-child(2) tbody tr td:nth-child(2) table tbody tr td table tbody tr td:nth-child(2) table tbody tr:nth-child(2) td[align=center]").first();

这是有效的,因为另一个 td 没有居中。

关于java - 使用 JSoup 解析 HTML(格式不正确),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16914980/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com