-
jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
-
下载地址:jsoup-1.11.2.jar
-
jsoup中文文档:http://www.open-open.com/jsoup/
一个小实例:(获取:鸡病专业网 每日鸡蛋价格汇总)
import java.io.IOException;
import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class GetWebContent {
public static final String url = "http://www.jbzyw.com";
/**
* 获取网页源码
*
* @param url
*/
public static Document getDocument(String url) {
Connection conn = null;
Document doc = null;
// 有的抓取会报错403.解决方法:设置header,模仿浏览器访问。
try {
conn = Jsoup.connect(url).timeout(1000 * 60);
conn.header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
conn.header("Accept-Encoding", "gzip, deflate, sdch");
conn.header("Accept-Language", "zh-CN,zh;q=0.8");
conn.header("User-Agent",
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36");
doc = conn.get();
} catch (IOException e) {
e.printStackTrace();
}
return doc;
}
public static void main(String[] args) {
// 获取网页源码
Document doc = getDocument(url);
// 查看布局,解析页面,定位需要的数据
Element content = doc.getElementById("tab02");// 根据id获取对象
Elements links = content.getElementsByTag("a");// 根据‘标签’获取对象集
// 遍历Elements
for (Element link : links) {
String href = link.attr("href");// 获取某一属性
String title = link.attr("title");// 获取某一属性
if (title.contains("汇总")) {
Document desc = getDocument(url + href);
Elements contents = desc.getElementsByClass("content");// 根据class获取对象集
Element contentItem = contents.get(0);
Elements contentdDIV = contentItem.getElementsByTag("div");// 根据‘标签’获取对象集
Elements contentdImg = contentItem.getElementsByTag("img");// 根据‘标签’获取对象集
// 走势图
if (contentdImg.size() > 0 && !contentdImg.get(0).attr("src").contains("http:")) {
System.out.println(url + contentdImg.get(0).attr("src"));
}
// content-文本
System.out.println(title);
String[] prices = contentdDIV.get(0).text().split(" ");
for (String price : prices) {
if (price.contains("地区")) {
System.out.println(price);
}
}
}
}
}
}
网友评论