java爬虫抓取网页数据(Java网络爬虫系列文章之采集虎扑列表新闻(图))
优采云 发布时间: 2022-04-10 03:01java爬虫抓取网页数据(Java网络爬虫系列文章之采集虎扑列表新闻(图))
这是Java网络爬虫系列的第一篇文章。如果您不了解Java网络爬虫系列文章,请参考学习Java网络爬虫所需的基础知识。第一篇是关于Java网络爬虫的介绍。在本文中,我们以 采集hupu 列表新闻的新闻标题和详情页为例。需要提取的内容如下图所示:
我们需要提取图中圈出的文字及其对应的链接。在提取过程中,我们会使用两种方法进行提取,一种是Jsoup方法,另一种是httpclient+正则表达式方法。它们也是Java网络爬虫常用的两种方法。这两种方法你不懂也没关系。后面会有相应的说明书。在正式写解压程序之前,先解释一下Java爬虫系列博文的环境。本系列博文中的所有demo都是使用SpringBoot搭建的。无论使用哪种环境,只需要正确导入对应的包即可。
通过 Jsoup 提取信息
我们先用Jsoup来提取新闻信息。如果你还不了解 Jsoup,请参考
首先创建一个Springboot项目,名称可选,在pom.xml中引入Jsoup的依赖
org.jsoup
jsoup
1.12.1
好,我们一起来分析一下页面,想必你还没有浏览过,点击这里浏览虎扑新闻。在列表页面中,我们使用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 标签
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 = "https://voice.hupu.com/nba";
CrawlerBase crawlerBase = new CrawlerBase();
crawlerBase.jsoupList(url);
}
执行main方法,得到如下结果:
从结果可以看出,我们已经正确地提取到了我们想要的信息。如果要采集详情页的信息,只需要写一个采集详情页的方法,在方法中提取详情页对应的节点信息,然后通过将列表页面中的链接提取到详细信息页面的提取方法中。