我正在使用jsoup库,今天我遇到了一个问题。我必须刮取DuckDuckGo并为每个页面获取查询结果的所有标题,但使用
Document doc = Jsoup.connect("https://duckduckgo.com/html/?q=" + query).get();
我只得到关于第一页的结果。我怎样才能继续下一页?
您需要从每个页面中提取表单参数,以获取下一页面的请求参数。这是如何:
public static Map<String, String> getFormParams(final Document doc) {
return doc.select("div.nav-link > form")
.first()
.select("input")
.stream()
.filter((input) -> {
return input.attr("name") != null && !input.attr("name").equals("");
})
.collect(Collectors.toMap(input -> input.attr("name"), input -> input.attr("value")));
}
public static void main(final String... args) throws IOException {
final String baseURL = "https://duckduckgo.com/html";
final Connection conn = Jsoup.connect(baseURL)
.userAgent("Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile Safari/535.19");
conn.data("q", "search phrase"); // Change "search phrase"
// 1st page
final Document page1 = conn.get();
final Map<String, String> formParams
= getFormParams(page1);
// 2nd page
final Document page2 = conn.data(formParams).get();
}
我的代码不会获取这样的链接。使用doc.select也没有帮助。我的问题是,如何从页面中获得所有链接? 编辑:我想我知道问题出在哪里了。我遇到麻烦的页面写得很糟糕,HTML验证器抛出了大量的错误。这会引起问题吗?
问题内容: 我有以下代码,用于使用JSoup在Java中解析HTML。 问题是我只能检索首页搜索结果链接。我应该怎么做才能从Google搜索结果的其余页面获得链接。 问题答案: 如果要从第二页获得结果,请添加到URL。对于第三页使用,依此类推。
我试图解析我的大学网站,以获得一个新闻列表(标题+链接)从主要网站。然而,当我试图解析一个完整的网站时,我要查找的链接被嵌套在其他类、表等的深处。下面是我试图使用的代码: 但不管用。如果每一个链接都放在以下位置,那么是否有更好的方法获得所有这些链接的href值和标题: 也许是某种循环,它会迭代所有这些标记,并从中获取值? 感谢帮助:-)
问题内容: 我正在使用此代码检索本页主要文章中的文本。 问题是textview中没有显示任何内容。我要检索的文字都没有出现。Log.i与调试日志中的段一起显示。因此,我知道其连接成功。只是不知道为什么即时通讯没有在textview中获取任何文本。 问题答案: 以下是您问题的相关摘要: 您在这里犯了一个根本性的错误。文档中没有HTML标签。但是,有一个。根据有关Jsoup食谱一半的CSS选择器概述,
我们会很感激你的帮助。