如何使用Jsoup解析HTML文档中“标记名”的元素列表?

时间:2019-04-02 21:38:07

标签: java jsoup

使用Jsoup为长标记名解析HTML页面时,我始终遇到问题。 就我而言,我正在尝试从youtube搜索页面中提取<ytd-video-renderer>元素。但是我尝试了很多方法。没有可靠或非空的列表被返回。

到目前为止,我尝试过的所有操作,每个都针对HTML Document对象doc

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

.getElementsByClass("ytd-item-section-renderer")(仅在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])。这将返回所有视频标题。但可悲的是,其他文本还有其他链接。因此不可靠。

我已经安装了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)

我想看到的是列表中要求的每个元素。接下来,我想再次解析每个元素,但让我们首先解决它。希望这将使我掌握解决其余问题的专业知识。现在,我每次都会得到一个空列表。

非常感谢您。

1 个答案:

答案 0 :(得分:0)

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

我不确定您的目标到底是什么,但是您可能想看看YouTube API,看看是否有更简单的方法来做自己想要的事情。