如何使用 Jsoup 为 'tagname' 的元素列表解析 HTML 文档?

How to parse an HTML document for an element list of 'tagname' using Jsoup?

我在使用 Jsoup 解析 HTML 页面的长标记名时一直存在问题。 就我而言,我正在尝试从 YouTube 搜索页面中提取 <ytd-video-renderer> 元素。不管我尝试了多少种方法。不可靠,或 non-empty,返回列表。

到目前为止我已经尝试过的事情,每个都针对 HTML 文档 object doc.

.select("ytd-video-renderer")(无果,列表为空。)

.getElementsByClass("ytd-item-section-renderer")(一个class只出现在ytd-video-renderer

.select("ytd-video-renderer.ytd-item-section-renderer")

.select("ytd-video-renderer[class*=ytd-item-section-renderer]")

.select("div#dismissable)ytd-video-renderer下唯一的div)

还有更多参数...

我也尝试了其他标签,但我遇到了同样的问题。

我最接近成功的是:.select(a[href*=watch])。这returns 所有视频标题。但遗憾的是还有一些与其他文本的其他链接。因此不可靠。

我安装了 Java 8 和最新版本的 Jsoup。

这是实现 Jsoup 的代码:

public class SearchPage {
    private Document doc;
    public SearchPage(String url){
        try {
            doc = Jsoup.connect(url).get();
        } catch (IOException ex) {
            //taking care of my error cats
        }
    }
    public Elements test(){  //just to test
        return doc.getElementsByTag("ytd-item-renderer");
    }
}

我尝试提取的示例: An image of HTML blocks that I'm looking for

好像我错过了很多人说 Jsoup 很棒而且简单的东西......(不是我的情况:v)

我想看到的是列表中我要求的每个元素。接下来我想再次解析每个元素,但让我们先解决这个问题。希望这能给我解决其余问题的诀窍。现在我每次都得到一个空列表。

非常感谢。

您正在查看的 Youtube 搜索页面的内容是由您的浏览器通过 Javascript 呈现的。 Jsoup.connect(url).get()行只会获取页面的HTML内容,不会执行任何Javascript。如果您使用 cURL 或其他一些命令行工具请求页面,您会发现您要查找的元素不存在。

我不确定你的目标是什么,但你可能想看看 YouTube API 看看是否有更简单的方法来做你想做的事。