什么是爬虫?
网络爬虫,又被称为网页蜘蛛,网络机器人,是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。
爬虫的作用
网络爬虫也可以自动地在互联网中进行数据信息的采集与整理。
学习爬虫可以私人订制一个搜索引擎,并且可以对搜索引擎的数据采集工作原理进行更深层次地理解。
搜索引擎离不开爬虫,比如百度搜索引擎的爬虫叫作百度蜘蛛(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 审查元素查看页面结构,分析结果如下图所示:
右侧红色标注内容,就是获取到完整的结构内容,知道内容在哪个标签内,这样才方便写代码获取你想要的内容。
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); }
得到如下结果:
从结果中可以看出,我们已经正确的提取到了我们想要的信息。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》