[关闭]
@yulongsun 2018-05-02T15:22:51.000000Z 字数 1656 阅读 963

Java爬虫Jsoup

技术调研


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. 设置元素的文本内容

基础功能代码

  1. package jsoup;
  2. import org.jsoup.Jsoup;
  3. import org.jsoup.nodes.Document;
  4. import org.jsoup.nodes.Element;
  5. import org.jsoup.select.Elements;
  6. import java.io.IOException;
  7. public class ListLinks {
  8. public static void main(String[] args) throws IOException {
  9. String url = "http://career.hdu.edu.cn/";
  10. // String url = "http://www.haitou.cc/";
  11. print("Fetching %s...", url);
  12. Document doc = Jsoup.connect(url).get();
  13. Elements links = doc.select("a[href]");
  14. Elements media = doc.select("[src]");
  15. Elements imports = doc.select("link[href]");
  16. /*Media*/
  17. print("\nMedia: (%d)", media.size());
  18. for (Element element : media) {
  19. String tagName = element.tagName();
  20. if (tagName.equals("img"))
  21. print(" * %s: <%s> %sx%s (%s)", tagName, element.attr("abs:element"), element.attr("width"), element.attr("height"), trim(element.attr("alt"), 20));
  22. else
  23. print(" * %s: <%s>", tagName, element.attr("abs:element"));
  24. }
  25. /*Import*/
  26. print("\nImports: (%d)", imports.size());
  27. for (Element link : imports) {
  28. print(" * %s <%s> (%s)", link.tagName(), link.attr("abs:href"), link.attr("rel"));
  29. }
  30. /*Links*/
  31. print("\nLinks: (%d)", links.size());
  32. for (Element link : links) {
  33. print(" * a: <%s> (%s)", link.attr("abs:href"), trim(link.text(), 35));
  34. }
  35. }
  36. private static void print(String msg, Object... args) {
  37. System.out.println(String.format(msg, args));
  38. }
  39. private static String trim(String s, int width) {
  40. if (s.length() > width)
  41. return s.substring(0, width - 1) + ".";
  42. else
  43. return s;
  44. }
  45. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注