使用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,看看是否有更简单的方法来完成您想要的事情。