我正在尝试解析网页padalvarigal.com获取页面中所有结果的 URL(以绿色突出显示)。但是当我使用 Jsoup 解析网页时,在打印 doc 对象时我没有获取整个 div。 div id“hits”中的 URL 和标题也被替换为我在控制台中打印的文档对象中的“{{{URL}}}”、“{{{Title}}}” 。也在实际页面中命中了六个带有类名的div 我在解析的页面中只得到一个名为 hit 的 div。
我还尝试将 maxBodySize() 设置为 0 以获取整个网页结果,但仍然遇到相同的问题。请指导我出了什么问题。
package com.balaji.parse;
import org.jsoup.Jsoup;
import org.jsoup.Connection;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class ParseHTML {
private static final String URL = "http://www.paadalvarigal.com/search/?q=naanum%20rowdythan";
public static void main(String args[]) {
//parseFromString();
parseFromHTML();
}
private static void parseFromString() {
String html = "<html><head><title>First parse</title></head><body><p>Parsed HTML into a doc.</p></body></html>";
Document doc = Jsoup.parse(html);
System.out.println(doc.head());
System.out.println(doc.title());
System.out.println(doc.body());
//To Parse only body tag and elements - adds HTML and Body tags.
System.out.println("Parsing only Body");
Document doc2 = Jsoup.parseBodyFragment(html);
System.out.println(doc2);
}
private static void parseFromHTML() {
try {
Connection con = Jsoup.connect(URL);
con.timeout(5000);
con.header("Accept-Encoding", "gzip, deflate");
con.userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0");
con.maxBodySize(0);
Document doc = con.get();
System.out.println(doc.head());
System.out.println(doc.title());
System.out.println(doc);
} catch(Exception ex) {
ex.printStackTrace();
}
}
}
P.S:我是 JSoup 的新手,我正在尝试学习个人项目的框架。
最佳答案
您不需要使用 jsoup 来获取此网站的搜索结果。
如果您查看 Chrome 开发者工具的“网络”选项卡,您可以看到加载页面时,POST
发送至 an endpoint具有特定的 JSON 内容:
{"requests":[{"indexName":"song","params":"query=naanum%20rowdythan&hitsPerPage=7&maxValuesPerFacet=7&page=0&facets=%5B%22singers%22%2C%22Lyrics%20By%22%2C%22Music%20By%22%2C%22Singers%22%5D&tagFilters="}]}
您可以看到 q=naanum%20rowdythan
是 JSON 的一部分。
这是您将得到的响应:
{
"results": [
{
"hits": [
{
"Title": "Varavaa Varavaa",
"Movie": "Naanum Rowdydhaan",
"Lyrics By": [
"Vignesh Shivan"
],
"Music By": [
"Anirudh"
],
"Singers": [
"Anirudh Ravichander",
"Vignesh Shivan"
],
"Img": "http://www.paadalvarigal.com/wp-content/uploads//NaanumRowdydhaan-70x53.jpg",
"URL": "http://www.paadalvarigal.com/3598/varavaa-varavaa-naanum-rowdydhaan-song-lyrics.html",
"objectID": "3598",
"_highlightResult": {
"Title": {
"value": "Varavaa Varavaa",
"matchLevel": "none",
"matchedWords": []
},
"Movie": {
"value": "<em>Naanum</em> <em>Rowdydhaa</em>n",
"matchLevel": "full",
"matchedWords": [
"naanum",
"rowdythan"
]
}
}
},
所以你需要做的是:
- 使用修改后的正文向端点发送 POST 请求(以 适应您的查询)( Sending HTTP POST Request In Java )并获取 JSON 格式的响应。
- 解析 JSON 结果以获得您需要的内容 (How to parse JSON in Java)
关于java - Jsoup 未返回 HTML 页面中的所有 div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36020683/