【发布时间】:2012-12-01 09:06:08
【问题描述】:
Document doc = Jsoup.connect("http://www.utah.edu/").get();
Elements lists = doc.select("ul");
for (Element list: lists) {
Elements li = list.select("li a");
if (li.size() > 0) {
ArrayList<String> anchors = new ArrayList<String>();
for (Element e : li) {
anchors.add(e.text());
}
System.out.println(anchors);
}
}
我正在尝试从this page 中获取由ul 标记呈现的所有html 列表。但它失败了。我怀疑页面中有脚本阻止我的程序这样做。
编辑:为了让我的问题更简单,请考虑以下代码:
Document doc = Jsoup.connect("http://www.utah.edu/").get();
Elements lists = doc.select("ul");
System.out.println(lists.size());
输出:
0
【问题讨论】:
-
但它失败了。到底发生了什么?有错误信息吗?我不认为页面可以使用任何脚本来阻止您解析它。但是,如果您的 HTTP 请求中未包含用户代理,有时 Web 服务器会阻止您下载该页面。
-
@dbaseman 程序成功运行结束,但没有任何输出发送到控制台。现在我确定我的程序没有提取任何列表。
-
@TerryLi jsoup 不会执行 javascript。
-
@xiaoyi 好的,这次会有什么问题?我检查了源代码,其中显示了很多列表。
-
@TerryLi 一个可能的答案是,jsoup 发送的用户代理字符串使 utah.edu 认为它是一个机器人而不是浏览器。所以它返回其他页面内容。您可以将浏览器的用户代理(在 chrome 的检查器中)更改为 jsoup 的,看看会发生什么。
标签: java javascript html web-crawler jsoup