@yulongsun
2018-05-02T15:22:51.000000Z
字数 1656
阅读 963
技术调研
jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
中文版文档:http://www.open-open.com/jsoup/
网页版爬虫:https://try.jsoup.org/
入门:
1. 解析和遍历一个文档
输入:
2. 解析一个html字符串
3. 解析一个body片段
4. 从一个url加载一个document对象
5. 根据一个文件加载一个doucument对象
抽取:
6. 使用dom方法来遍历一个document对象
7. 使用选择器来查找元素
8. 从元素集合抽取属性,html,文本内容
9. URL处理
数据修改:
11. 设置属性值
12. 设置元素的html内容
13. 设置元素的文本内容
基础功能代码
package jsoup;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
public class ListLinks {
public static void main(String[] args) throws IOException {
String url = "http://career.hdu.edu.cn/";
// String url = "http://www.haitou.cc/";
print("Fetching %s...", url);
Document doc = Jsoup.connect(url).get();
Elements links = doc.select("a[href]");
Elements media = doc.select("[src]");
Elements imports = doc.select("link[href]");
/*Media*/
print("\nMedia: (%d)", media.size());
for (Element element : media) {
String tagName = element.tagName();
if (tagName.equals("img"))
print(" * %s: <%s> %sx%s (%s)", tagName, element.attr("abs:element"), element.attr("width"), element.attr("height"), trim(element.attr("alt"), 20));
else
print(" * %s: <%s>", tagName, element.attr("abs:element"));
}
/*Import*/
print("\nImports: (%d)", imports.size());
for (Element link : imports) {
print(" * %s <%s> (%s)", link.tagName(), link.attr("abs:href"), link.attr("rel"));
}
/*Links*/
print("\nLinks: (%d)", links.size());
for (Element link : links) {
print(" * a: <%s> (%s)", link.attr("abs:href"), trim(link.text(), 35));
}
}
private static void print(String msg, Object... args) {
System.out.println(String.format(msg, args));
}
private static String trim(String s, int width) {
if (s.length() > width)
return s.substring(0, width - 1) + ".";
else
return s;
}
}