爬虫
今天看到\(Jsoup\)这个这个爬虫包,貌似使用率挺广的,我也拿来练练手。刚开始用的有点蒙蔽😂,主要还是不太懂\(JavaScript\)的代码,有点费时。
一、获取HTML内容
首先肯定要获取目标主机的Http响应,Jsoup
包也对此做了封装处理。
// 直接输入目标url地址就行
Document document = Jsoup.parse(new URL(String urlString), timeOutMills);
这里我没有使用这个自带封装方法,使用了java.net下的自带的连接方式来获取html字符串。
/**
* 获取目标HTML页面资源
*
* @param urlPath 目标url地址
* @return 以String方式返回页面的HTML
* @throws IOException
*/
public static String getHtmlResponse(String urlPath) throws IOException {
// StringBuilder字符串连接提升效率
StringBuilder sb = new StringBuilder();
// 1. 新建URL
URL targetURL = new URL(urlPath);
// 2. 进行连接
URLConnection conn = targetURL.openConnection();
conn.connect();
// 根据实际情况调整为utf-8或GBK
InputStreamReader reader = new InputStreamReader(conn.getInputStream(), "GBK");
BufferedReader br = new BufferedReader(reader);
String line;
while ((line = br.readLine()) != null) {
sb.append(line);
sb.append("\n");
}
return sb.toString();
}
二、解析HTML内容
/**
* 利用Jsoup解析 HTML 内容
*
* @param htmlResource HTML to parse
*/
public static void getContent(String htmlResource) {
Document document = Jsoup.parse(htmlResource);
Element goods = document.getElementById("search_nature_rg");
Elements lists = goods.getElementsByTag("li");
for (Element e : lists) {
//title
String title = e.getElementsByTag("a").attr("title");
System.out.println(title);
// price
String priceNow = e.getElementsByClass("search_now_price").text();
Object pricePrevious = e.getElementsByClass("search_pre_price").text();
System.out.printf("现价: %s\t原价: %s\n", priceNow, pricePrevious);
System.out.println("=================================================");
}
}
/* 测试结果:
Java从入门到精通(第5版)
现价: ¥62.10 原价: ¥69.80
=================================================
Java核心技术 卷I 基础知识(原书第11版)
现价: ¥101.30 原价: ¥149.00
=================================================
深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)
现价: ¥91.40 原价: ¥129.00
=================================================
*/