收藏文章 楼主

安利一款Java爬虫利器——Jsoup

版块:IT/互联网   类型:普通   作者:小羊羔links   查看:225   回复:0   获赞:0   时间:2022-08-04 23:42:35

Jsoup是一款JavaHTML解析器,可直接解析URL地址 本地的HTML文本文件,它可以自动解析所有超文本标签,提取出这些标签的属性 值,甚至可以遍历子标签。Jsoup的官方网址是https://jsoup.org/,在这里可以下载jsoup.jar文件和阅读相关帮助文档。

使用Jsoup解析一个网页分为两步 第一步是输入,第二部是抽取。

1 所谓的输入就是捕捉网页超文本,这一步只需要一行代码,例如解析百度首页的代码如下

Document doc = Jsoup.connect("http://www.baidu.com").get();

返回的类型是Jsoup包中提供的org.jsoup.nodes.Document类,该类用于储存HTML超文本。

如果输入的是HTML文本,则代码如下

String html = "<html><head></head><body><p>This is HTML.</p></body></html>";

Document doc = Jsoup.parse(html);

如果输入的是一个HTML文本文件,则需要使用File类,并制定读取的字符编码,代码如下

File input = new File("D:/demo.html");

Document doc = Jsoup.parse(input, "UTF-8");

2 获得网页超文本之后,第二部就是抽取。抽取超文本数据的方法有很多,例如抽取网址“example.com”的超文本数据的代码如下:

Document doc = Jsoup.connect("example.com").get();

Element users= doc.getElementById("users"); / 获取id='users'的元素

Elements account = users.getElementsByClass("a"); / 获取该集合下class ='a'的元素集合

for (Element info: account ) {

   String infoHref = info.attr("href"); / 获取该元素href属性中的值

   String infoText = info.text(); / 获取该元素的文本值

}

除了例子中的用法之外,还可以获取以下更多数据

  • getElementById(String id)id=id’的元素

  • getElementsByClass(String className) 获取class=className’的元素

  • getElementsByAttribute(String key) 获取含有key名称属性的元素

  • attr(String key) 获取属性attr对应的值

  • attributes() 获取所有属性

  • id() 获取id的值

  • className() 获取class的值

  • and classNames() 获取所有class的值的Set集合

  • text() 获取文本内容

  • html() 获取元素内HTML内容

  • outerHtml() 获取元素外HTML内容

  • data() 获取数据内容

抽取数据的时候还可以对数据进行筛选,例如

Document doc = Jsoup.connect("example.com").get();

Elements links = doc.select("a[href]"); /带有href属性的a元素

Elements gifs = doc.select("img[src$=.gif]");  / 所有动图的标签

Element masthead = doc.select("div.head").first();  /div标签

除了例子中的用法之外,Selector选择器还提供以下用法

  • tagname: 通过标签查找元素,比如 a

  • ns|tag: 通过标签在命名空间查找元素,比如 可以用 fb|name 语法来查找 <fb:name> 元素

  • #id: 通过ID查找元素,比如 #username

  • .class: 通过class名称查找元素,比如 .head

  • [attribute]: 利用属性查找元素,比如 [href]

  • [^attr]: 利用属性名前缀来查找元素,比如 可以用[^data-] 来查找带有HTML5 Dataset属性的元素

  • [attr=value]: 利用属性值来查找元素,比如 [width=200]

  • [attr^=value], [attr$=value],[attr*=value]: 利用匹配属性值开头、结尾 包含属性值来查找元素,比如 [href*=/mp4/]

  • [attr =regex]: 利用属性值匹配正则表达式来查找元素,比如 img[src =(?i)\.(png|jpe?g)]

  • *: 这个符号将匹配所有元素

  • el#id: 元素+ID,比如 div#images

  • el.class: 元素+class,比如 div.head

  • el[attr]: 元素+class,比如 a[href]

  • 任意组合,比如 a[href].login

  • ancestor child: 查找某个元素下子元素,比如 可以用.body p 查找在"body"元素下的所有 p元素

  • parent > child: 查找某个父元素下的直接子元素,比如 可以用div.content > p 查找 p 元素,也可以用body > * 查找body标签下所有直接子元素

  • siblingA + siblingB: 查找在A元素之前第一个同级元素B,比如 div.head + div

  • siblingA siblingX: 查找A元素之前的同级X元素,比如 h1 p

  • el, el, el:多个选择器组合,查找匹配任一选择器的唯一元素,例如 div.head, div.videos


看完上面的内容,是不是瞬间感觉Java做数据爬取也这么简单,还不赶紧来试试。喜欢的话,记得点赞+收藏。


小羊羔锚文本外链网站长https://seo-links.cn 
回复列表
默认   热门   正序   倒序

回复:安利一款Java爬虫利器——Jsoup

Powered by 小羊羔外链网 8.3.11

©2015 - 2024 小羊羔外链网

免费发软文外链 鄂ICP备16014738号-6

您的IP:23.22.35.162,2024-04-23 04:45:12,Processed in 0.04474 second(s).

支持原创软件,抵制盗版,共创美好明天!
头像

用户名:

粉丝数:

签名:

资料 关注 好友 消息