1谈谈网络爬虫1.1什么是网络爬虫
在大数据时代,信息的采集是一项重要的工作,而互联网中的数据是海量的,如果单纯靠人力进行信息采集,不仅低效繁琐,搜集的成本也会提高 。如何自动高效地获取互联网中我们感兴趣的信息并为我们所用是一个重要的问题,而爬虫技术就是为了解决这些问题而生的 。
网络爬虫(Web crawler)也叫做网络机器人,可以代替人们自动地在互联网中进行数据信息的采集与整理 。它是一种按照一定的规则,自动地抓取万维网信息的程序或者脚
本,可以自动采集所有其能够访问到的页面内容,以获取或更新这些网站的内容和检索方式 。
从功能上来讲,爬虫一般分为数据采集,处理,储存三个部分 。爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新 的URL放入队列,直到满足系统的一定停止条件 。
1.2网络爬虫可以做什么
我们初步认识了网络爬虫,网络爬虫具体可以做什么呢?
可以实现搜索引擎
大数据时代,可以让我们获取更多的数据源 。
快速填充测试和运营数据
为人工智能提供训练数据集
1.3网络爬虫常用的技术(JAVA)
1.3.1底层实现 HttpClient + Jsoup
HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议 。HttpClient 已经应用在很多的项目中,比如 Apache Jakarta 上很著名的另外两个开源项目 Cactus 和 htmlUnit 都使用了 HttpClient 。更多信息请关注http://hc.apache.org/
jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容 。它提供了一套非常省力的API,可通过DOM,css以及类似于jQuery的操作方法来取出和操作数 据 。
1.3.2开源框架 Webmagic
webmagic是一个开源的Java爬虫框架,目标是简化爬虫的开发流程,让开发者专注于逻辑功能的开发 。webmagic的核心非常简单,但是覆盖爬虫的整个流程,也是很好的学习 爬虫开发的材料 。
文章插图
webmagic的主要特色:
完全模块化的设计,强大的可扩展性 。
核心简单但是涵盖爬虫的全部流程,灵活而强大,也是学习爬虫入门的好材料 。提供丰富的抽取页面API 。
无配置,但是可通过POJO+注解形式实现一个爬虫 。支持多线程 。
支持分布式 。
支持爬取js动态渲染的页面 。
无框架依赖,可以灵活的嵌入到项目中去 。
2爬虫框架Webmagic2.1架构解析
WebMagic项目代码分为核心和扩展两部分 。核心部分(webmagic-core)是一个精简的、模块化的爬虫实现,而扩展部分则包括一些便利的、实用性的功能 。扩展部分(webmagic-extension)提供一些便捷的功能,例如注解模式编写爬虫等 。同时内置了一些常用的组件,便于爬虫开发 。
WebMagic的设计目标是尽量的模块化,并体现爬虫的功能特点 。这部分提供非常简 单、灵活的API,在基本不改变开发模式的情况下,编写一个爬虫 。
WebMagic的结构分为Downloader、PageProcessor、Scheduler、Pipeline四大组 件,并由Spider将它们彼此组织起来 。这四大组件对应爬虫生命周期中的下载、处理、管 理和持久化等功能 。而Spider则将这几个组件组织起来,让它们可以互相交互,流程化的 执行,可以认为Spider是一个大的容器,它也是WebMagic逻辑的核心 。
文章插图
四大组件
Downloader
Downloader负责从互联网上下载页面,以便后续处理 。WebMagic默认使用了ApacheHttpClient作为下载工具 。
PageProcessor
PageProcessor负责解析页面,抽取有用信息,以及发现新的链接 。WebMagic使用Jsoup
作为HTML解析工具,并基于其开发了解析XPath的工具Xsoup 。
在这四个组件中,PageProcessor对于每个站点每个页面都不一样,是需要使用者定制的部分 。
Scheduler
Scheduler负责管理待抓取的URL,以及一些去重的工作 。WebMagic默认提供了JDK的内存队列来管理URL,并用集合来进行去重 。也支持使用redis进行分布式管理 。
Pipeline
Pipeline负责抽取结果的处理,包括计算、持久化到文件、数据库等 。WebMagic默认提供了“输出到控制台”和“保存到文件”两种结果处理方案 。
2.2PageProcessor
需求:编写爬虫程序,爬取csdn中博客–工人智能的内容
推荐阅读
- 5G手机的发射功率,到底能有多大?
- 什么是JVM?
- 网络交换机如何规划,VLAN原理介绍
- 初学者如何区分Html5开发和前端开发
- 网络常见的9大命令
- 开发过程中快速抓包并解析
- 人工智能基础算法
- iOS 14“本地网络”权限是什么,需要开吗?
- Spring框架中的国际化支持
- 网络诈骗200万怎么判刑