Java爬虫最全详解(作用原理及代码示例)

Java爬虫最全详解(作用原理及代码示例)-mikechen

什么是爬虫?

网络爬虫,又被称为网页蜘蛛,网络机器人,是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。

 

爬虫的作用

网络爬虫也可以自动地在互联网中进行数据信息的采集与整理。

学习爬虫可以私人订制一个搜索引擎,并且可以对搜索引擎的数据采集工作原理进行更深层次地理解。

搜索引擎离不开爬虫,比如百度搜索引擎的爬虫叫作百度蜘蛛(Baiduspider),每天会在海量的互联网信息中进行爬取,爬取优质信息并收录。

当用户在百度搜索引擎上检索对应关键词时,百度将对关键词进行分析处理,从收录的网页中找出相关网页,按照一定的排名规则进行排序并将结果展现给用户。

除此之外,在大数据时代,我们要获取更多数据,就要进行数据的挖掘、分析、筛选,就需要去某些网站进行爬取。

 

爬虫的原理

网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。

传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。

聚焦爬虫的工作流程较为复杂,需要根据一定的网页分析算法过滤与主题无关的链接,保留有用的链接并将其放入等待抓取的URL队列。

然后根据一定的搜索策略从队列中选择下一步要抓取的网页URL,并重复上述过程,直到达到系统的某一条件时停止。

另外,所有被爬虫抓取的网页将会被系统存贮,进行一定的分析、过滤,并建立索引,以便之后的查询和检索。

 

怎么实现爬虫?

1.引入依赖

java当中爬虫使用的是jsoup的类库,jsoup提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。

先建立一个 Springboot 项目,在 pom.xml 中引入 Jsoup 的依赖,如下所示:

 <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.10.3</version>
        </dependency>

2.了解内容结构

比如:我们想获取某一个新闻网站的内容,我们利用 F12 审查元素查看页面结构,分析结果如下图所示:

Java爬虫最全详解(作用原理及代码示例)-mikechen

右侧红色标注内容,就是获取到完整的结构内容,知道内容在哪个标签内,这样才方便写代码获取你想要的内容。

3.爬虫获取内容

当我们获知了上面的内容结构后,我们就可以一起来编写 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行代码就完成了。

 

4.验证爬虫内容

最后,我们编写 main 方法来执行 jsoupList 方法,看看爬虫内容是否正确。

如下所示:

public static void main(String[] args) {
 String url = "https://voice.hupu.com/nba";
 CrawlerBase crawlerBase = new CrawlerBase();
 crawlerBase.jsoupList(url);
}

得到如下结果:

Java爬虫最全详解(作用原理及代码示例)-mikechen

从结果中可以看出,我们已经正确的提取到了我们想要的信息。

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法