独家新闻日记

修图软件,深圳天气,步枪

启迪云|马坤鹏

什么是网络爬虫

网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。

——来源:百度百科

网络爬虫是通过网页的链接地址来寻找网页,它通过特定的搜索算法来确定路线,通常从网站的某一个页面开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,根据深度优先算法或者广度优先算法一直循环下去,直到把这个网站满足条件的所有网页都抓取完为止。

网络爬虫的工作原理

在网络爬虫的系统框架中,主过程由控制器,解析器,资源库三部分组成。控制器的主要工作是负责给多线程中的各个爬虫线程分配工作任务。解析器的主要工作是下载网页,进行页面的处理,主要是将一些JS脚本标签、CSS代码内容、空格字符、HTML标签等内容处理掉,爬虫的基本工作是由解析器完成。资网页免费代理源库是用来存放下载蒋欣胸到的网页资源,一般都采用大型的数据库存储,如Ora彭丽嫒简介cle数据库,并对抗日奇侠1其建立索引。

  • 控制器:控制器是网络爬虫的中央控制器,它主要是负责根据系统传过来的URL链接,从线程池中分配一个线程,然后启动该祥兴记生煎线程调用爬虫爬取网页的过程。
  • 解析器:解析器是负责网络爬虫的主要部分,其负责的工作主要有:下载网页的内容,对网页的文本进行处理,如过滤功能,抽取特殊HTML标签的功能,分析数据功能。
  • 资源库:主要是用来存储网页中下载下来的数据记录的容器,并提供生成索引的目标源。

网络爬虫的流程



图1:网星露谷祝尼魔小屋布局络爬虫的流程


  • 1. 发起请求:向目标URL站点发起HTTP请求报文(请求头,请求体等),等待服务器响应。请求可根据需要来设定是否需要包含额外的请求头或者请求体内容。
  • 2. 获取响应内容:如果服务器能正常响应,此时会得到一个Response,Response的内容即是所要获取的页面内容,类型可能有HTML,Json字符串,二进制数据(如图片视频肖劲光爬灰)等类型。
  • 3. 美女啪啪啪动态图解析内容:解析得到的请求响应内容,然后对数据进行进一步加工处理。对请求响应内容如是HTML,可以用正则表达式、网页解析库进行解析;如是Json,可以直接转为Json对象解析等;如是URL且满足条件则继续发起新的HTTP请求。
  • 4. 保存数据:将解析加工后的数据进行保存处理。可以保存为文本,至数据库,或保存特定格式的文件(图片视频等)暴走韩娱。


网络爬虫技术Crawl4J应用

1. 技术介绍

Crawl4J:是一缝缝厚个轻量级且支持多线程网络爬虫技术,开发者可以调用相应的接口和设定响应的参数配置在短时间内创建一个网络爬虫应用。

Jsoup:jsoup 是一款HTML解析器,可直接解析某个UR国外恋足L地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于JavaScript的操作方法来取出和操作数据。适用于单网页数据抓取或静态HTML内容解析。

因此在项目中我们可以通过网络爬虫色人阁影院Crawl4J技术进行爬取网页内容,然后通过Jsoup技术对响应结果进行解析,并提取满足条件的内容。

2. 项目示例

接下来我们以抓取CSDN博客首页被推荐文章的为例子,定向采集每篇博客的修图软件,深圳天气,步枪标题,时间,阅读量。详细代码可张海顺错误言论以参照https://github.com/maerdetiantang/crawler

具体实现步骤如下:

  • Maven依赖Jar包:

edu.uci.ics

crawler4j

4.3


  • 控制器:

配置介绍:

  • config.setMaxDepthOfCrawling(int龙焱特种部队进攻越南 maxDepthOfCrawling):抓取深度限制,默认抓取深度不受限制(设定值为-1也不受限制)。如种子页面为A,A链接到B,B链接到C,C链接到D。种子页面A的深度为0,B的深度为1,以此类推。如果设定值为2,就不会抓取到D链接的内容。
  • config.setPolitenessDelay(int politenessDelay):每次请求前等待毫秒数,默认不等待。可以防止抓取请求过快而被服务器端认为是非法请求而终止访问的情况。
  • 可以通过如下代码设定代理设置:

crawlConfig.setProxyHost("proxyserver.example.com");

crawlConfig.setProxyPort(8080);

如果代理需要认证:

crawlConfig.setP七日娘子roxyUsername(username);

crawlConfig.五方清音茶getProxyPassword(password);

  • 解析器


代码解释:

shouldVisit():用来实现满足抓取数据的条件,如满足抓取条件则返回true,返回false代表不满足条件则放弃本次抓取。

visit(): 抓取返回的响应结果,此示例中通过Jsoup来解析响应内容。Jsoup的代码解析语法遵循JavaScript规范要求,对熟悉JavaScript的开发者使用起来比较方便易懂。

标签定位:HTML标签定位可以通过浏览器控制台的方式进行查看。

  • 资源库:

本示例中通过Java标准输出流来替代资源库的实现部分,未单独实现资源库的代码。从输出结果可以看出项目设定10个线程同时抓取满足条件的第一级深度的博客文章共计21篇。


规避反江门李嘉臣爬虫技术

在实际项目抓取的过程中应该满足君子协议即不违背robots.txt定义的抓取协议。同时爬虫项目的开发中可能会遇被抓取的WEB网站对访问频繁程度的限制,异步Ajax动态渲染数据等。可以参考如下方法解决:

  • 通过设定动态IP代理的方式,每抓取几次之后动态更换IP地址,让服务器端判幼xxx断每次IP来源不同;
  • 通过设定抓取前休眠时间来降低抓取频度;
  • 分析动态Ajax请求,结合Jsoup进行单独的URL请求,获取异步请求数据响应内容;
  • 通过Selenium等相关自动化测试工具,模拟真实的浏览器请求获取Ajax异步请求渲染之后的数据;
  • 通过设定Header中的值,来规避相欣美乐胶囊关请求参数的限制。

推荐新闻