我正在尝试解析网页padalvarigal.com以获取页面中所有结果的网址(以绿色突出显示)。但是当我使用Jsoup解析网页时,我在打印doc对象时没有得到整个div。 div id“hits”中的网址和标题也会被我在控制台{{3}中打印的doc对象中的“{{{{{}}}”,“{{{Title}}}”替换}。在实际页面中也有6个带有类名的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的新手,我正在尝试学习个人项目的框架。
答案 0 :(得分:2)
您无需使用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"
]
}
}
},
所以你需要的只是:
答案 1 :(得分:1)
使用 Firebug 或开发人员工具查看页面的来源不,但是旧的权利 - 点击 - &gt;查看来源。
源应与 Jsoup 输出匹配。似乎有一个脚本(由页面加载)用真实数据替换{{URL}}
,{{Title}}
,...模板。
Jsoup 将不为您执行此操作 - 它不会执行任何客户端脚本。您将不得不找到另一种获取数据的方法。通过一些挖掘,您可以在加载的脚本中找到一些东西。