使用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)

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

非常感谢你。

最佳答案

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

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

09-28 11:38