我们以采集虎扑列表新闻的新闻标题和详情页为例,需要提取的内容如下图所示:
我们需要提取图中圈出来的文字及其对应的链接,在提取的过程中,我们可以使用两种方式来提取,一种是 Jsoup 的方式,另一种是 httpclient + 正则表达式的方式,这也是 Java 网络爬虫常用的两种方式,你不了解这两种方式没关系,后面会有相应的使用手册。在正式编写提取程序之前,我先交代一下 Java 爬虫系列博文的环境,该系列博文所有的 demo 都是使用 SpringBoot 搭建的,不管你使用哪种环境,只需要正确的导入相应的包即可。
本文介绍的是Jsoup 的方式
Jsoup 方式提取信息
我们使用 Jsoup 的方式提取新闻信息,如果你还不知道 Jsoup ,请参考 /
先建立一个 Springboot 项目,名字就随意啦,在 pom.xml 中引入 Jsoup 的依赖
<dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.12.1</version></dependency>
好了,接下来我们一起分析页面吧,想必你还没浏览过吧,点击这里浏览虎扑新闻。在列表页中,我们利用 F12 审查元素查看页面结构,经过我们分析发现列表新闻在
标签下,每一条新闻都是一个li标签,分析结果如下图所示:
由于我们前面已经知道了 css 选择器,我们结合浏览器的 Copy 功能,编写出我们 a标签的 css 选择器代码:div.news-list > ul > li > div.list-hd > h4 > a ,一切都准备好了,我们一起来编写 Jsoup 方式提取信息的代码:
/*** jsoup方式 获取虎扑新闻列表页* @param url 虎扑新闻列表页url*/public void jsoupList(String url){try {Document document = Jsoup.connect(url).get();// 使用 css选择器 提取列表新闻 a 标签// <a href="/nba/2484553.html" target="_blank">霍华德:夏休期内曾节食30天,这考验了我的身心</a>Elements elements = document.select("div.news-list > ul > li > div.list-hd > h4 > a");for (Element element:elements){//System.out.println(element);// 获取详情页链接String d_url = element.attr("href");// 获取标题String title = element.ownText();System.out.println("详情页链接:"+d_url+" ,详情页标题:"+title);}} catch (IOException e) {e.printStackTrace();}}
使用 Jsoup 方式提取还是非常简单的,就5、6行代码就完成了,关于更多 Jsoup 如何提取节点信息的方法可以参考 jsoup 的官网教程。我们编写 main 方法,来执行 jsoupList 方法,看看 jsoupList 方法是否正确。
public static void main(String[] args) {String url = "/nba";CrawlerBase crawlerBase = new CrawlerBase();crawlerBase.jsoupList(url);}
执行 main 方法,得到如下结果:
从结果中可以看出,我们已经正确的提取到了我们想要的信息,如果你想采集详情页的信息,只需要编写一个采集详情页的方法,在方法中提取详情页相应的节点信息,然后将列表页提取的链接传入提取详情页方法即可。
本文有参考博主平头哥,想进一步学习可 关注此博主