java广度优先爬虫示例,【爬虫】广度优先遍历抓取数据概述

113db61438a6583541bd28e0cbea4661.png

这次都是一些纯语言的表达,可能会有点啰嗦,或者有点枯燥,也是对爬虫的一些小小的见解,可能只是一些常见话,哈哈,还是耐心的写完。

网络爬虫的整体执行流程:

1)确定一个(多个)种子网页

2)进行数据内容的提取

3)将网页中的关联网页链接进行提取出来

4)将尚未爬去的关联网页内容放入到一个队列中

5)从队列中取出一个待爬去的页面,判断之前是否爬过

6)把没有爬过的内容进行爬取,并进行之前的重复操作

7)直到队列中没有新的内容,爬虫执行结束

跳 动

235fc3c5a435fab700d191a410bb9638.png

436bc12c00b9773c41d5ae0ab6bf381a.png

舞 蹈

这样进行爬虫时,一般会有一些概念必须知道的:

广度优先遍历:指网络爬虫会先抓取起始网页中链接的所有网页,然后选择其中的一种链接网页,继续抓取在此网页中的链接的所有网页。这个方法最常用,也可以进行网络爬虫并行处理,提高爬去数据效率。

广度优先遍历就是像金字塔一样,首先抓取第一层数据,作为种子节点,然后遍历第二层数据,接着遍历第三层数据,等等以此类推

从一个已知的种子链接开始宽度的遍历网页,为了知道哪些网页可以进行抓取,需要将新发现的网页存储到一个URL队列中,使用ArrayDeque实现一个队列,为了避免重复访问一个网址,需要将遍历过的网页URL存入到历史表中,使用HashSet实现这个历史表。如果使用Queue来实现ToDo,则对每一个增加到ToDo的元素都需要进行对象封装,因为ArrayQueue底层采用数组实现,所以增加到ArrayQueue的元素不需要对象封装,ArrayDeque性能比Queue更好,所以todo采用ArrayDeque实现。

在爬虫需要注意的一些事项:

1:分任务分包时,有可能出现线程安全问题

2:数据重复问题

3:频率控制问题(尽量不要过快,有可能被发爬虫干掉)

4:对象的创建和销毁问题

5:没有考虑到的所有问题

如感觉不错点击“好看”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/338248.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

if语句的用法是什么

if语句的用法:if语句是指编程语言(包括c语言、C#、VB、java、汇编语言等)中用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。if语句概述if语句是指编程语言(包…

gradle创建web工程_Gradle入门:创建Web应用程序项目

gradle创建web工程这篇博客文章描述了如何使用Gradle创建一个Web应用程序项目。 更具体地说,我们想创建一个使用Java的Web应用程序项目,将我们的Web应用程序打包到WAR文件中,并在开发环境中运行我们的Web应用程序。 让我们找出如何满足这些…

c语言如何实现玫瑰花

c语言实现玫瑰花的方法:#include #include ?#include #include #include #pragma comment(lib,"winmm.lib")//定义全局变量int rosesize 500;int h -250;//定义结构体struct DOT {double x;double y;double z;double r;double g;};bool calc(double a,…

php保存成乱序,php – 调用MySQL存储过程时出现乱序错误

我正在尝试使用PDO调用存储过程,但在尝试对结果进行获取时遇到以下错误.警告:数据包乱序.预计1收到16.数据包大小 163我的存储过程使用两个游标,我在从临时表中选择之前关闭它.我怀疑这可能是问题,因为我可以直接在MySQL中调用我的SP并且可以看到结果.在迁移到php_p…

maven 部署nexus_设置本地Nexus存储库并从Maven部署WAR文件

maven 部署nexusMaven Central充当中央存储库管理器,二进制文件由不同的团队/公司/个人上载并与世界其他地方共享。 就像github和其他对源代码控制非常有效的源代码存储库一样,这些存储库管理器还充当您自己生成的二进制工件的部署目标。 设置本地存储库…

c vector用法是什么

在c 中&#xff0c;vector是一个十分有用的容器&#xff0c;c vector用法是&#xff1a;1、基本操作(1)头文件#include.(2)创建vector对象&#xff0c;vector vec;(3)尾部插入数字&#xff1a;vec.push_back(a);(4)使用下标访问元素&#xff0c;cout<<vec[0]<<endl…

Matlab中的logspace函数,matlab之logspace函数

logspace()在matlab帮助里的英文注释是这样的&#xff1a;logspaceGeneratelogarithmically spaced vectorsSyntaxy logspace(a,b)y logspace(a,b,n)y logspace(a,pi)DescriptionThe logspace function generates logarithmically spacedvectors. Especially useful for cre…

c语言for循环如何打印菱形

c语言for循环打印菱形的方法&#xff1a;使用两个for循环&#xff0c;实现条件判断&#xff0c;代码为【int i,j;for(i0; i<2*n-1; i )_(in-i-1&&jc语言for循环打印菱形的方法&#xff1a;方法一&#xff08;以循环为主打印&#xff09;#include void print(int n) …

quasar 异步回调_Java IO基准测试:Quasar与异步ForkJoinPool与ManagedBlock

quasar 异步回调“ Arien看到了我们运行的parallelStreams和ForkJoin基准测试的结果后&#xff0c;在Twitter上与我们联系。 这激起了他的兴趣&#xff0c;因此他进行了一些自己的测试&#xff0c;将Quasar纤维加入了混合物。 这是他的结果和结论。” –塔基皮&#xff08;Taki…

php微信自动回复机器人,微信自动回复机器人功能怎么实现?

原标题&#xff1a;微信自动回复机器人功能怎么实现&#xff1f;微信自动回复机器人功能怎么实现&#xff1f;最近有不少小伙伴都在询问这个问题。很多人在微信营销的过程中&#xff0c;都会有这样的问题&#xff0c;微信好友太多&#xff0c;想要都在第一时间回复&#xff0c;…

C语言怎么合并两个有序链表

C语言合并两个有序链表的方法&#xff1a;拼接指定的两个有序链表的所有节点即可。例如两个有序链表分别为【1->2->4】和【1->3->4】&#xff0c;合并后的有序链表为【1->1->2->3->4->4】。具体方法&#xff1a;将两个有序链表合并为一个新的有序链…

jira集成开发代码_7种JIRA集成可优化您的Java开发流程

jira集成开发代码有哪些最佳集成可以用来优化JIRA工作流程&#xff1f; 我喜欢寻找在工作流程中提高效率的方法。 看着那些小小的自动化和流畅的流程&#xff0c;我的脸上露出了微笑。 我知道我并不孤单&#xff0c;有时花费更多的时间来获得一点点提升以使其正常工作&#xff…

php拼接多个insert,php – 将多个INSERTS分成一个表和多个表

我正在尝试使用PostgreSQL数据库在 PHP中开发一个Q& A网站.我有一个动作来创建一个页面,其中包含标题,正文,类别和标签.我设法插入所有这些字段,但是我在插入多个标记值时遇到了一些问题.我使用这个函数将逗号分隔的值放到一个数组中,现在我想要一些东西将每个数组元素插入…

c语言源程序结构是怎样的?

一个C语言源程序至少一个有main函数&#xff0c;定义函数必须指定 4 个元素&#xff1a;返回类型、函数名、圆括号内的形参表&#xff08;可能为空&#xff09;和函数体。源程序的结构特点&#xff1a;1、一个C语言源程序可以由一个或多个源文件组成。2、每个源文件可由一个或多…

gradle maven_将工件从Gradle自动提升到Maven Central

gradle maven快速教程&#xff0c;无需在带有Gradle Nexus Staging插件的Nexus GUI中单击即可将Gradle项目中的工件提升/释放到Maven Central。 介绍 Maven Central &#xff08;又名“中央存储库”&#xff09;是&#xff08;可能是&#xff09;全球最大的一组开源工件&#…

matlab 自定义对象,自定义类的对象显示

用于自定义对象显示的特定方法You can customize object display based on the state of the object and you can change different parts of the display.Change the order and number of properties displayed for an object of your class.Customize each of the three part…

c语言规定在一个源程序中main函数的位置是什么?

一个c程序有且仅有一个main函数&#xff0c;除main函数之外可以有若干个其它的函数&#xff0c;每个函数实现某一特定的操作。C语言规定&#xff0c;在一个源程序中&#xff0c;main函数的位置可以任意。因为&#xff1a;在一个C语言源程序中&#xff0c;程序总是从main函数开始…

jax-ws和jax-rs_使用JAX-RS和Jetty创建Web服务和Rest Server

jax-ws和jax-rs用Java创建WebService非常容易。 将其添加到ServletContainer并将其部署到嵌入式WebServer仅需要几行代码。 让我们创建一个具有两个函数的简单计算器&#xff0c;作为WebService的示例。 计算器将计算任意数量的squareRoot和平方。 它将返回一个简单的JSON响应…

图像锐化处理算法matlab,图像锐化matlab算法

《图像锐化matlab算法》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《图像锐化matlab算法(2页珍藏版)》请在读根文库上搜索。1、%常用图像锐化算法clcclearclose allimaimread(132.jpg);%读入图像imargb2gray(ima);%转为灰度图像 imadouble(ima);bw1 edge(ima,sobe…

可运行的c语言程序的扩展名为什么?

C语言源程序经过C语言编译程序编译之后&#xff0c;生成一个后缀为“.OBJ”的二进制文件(称为目标文件)&#xff0c;最后还要由称为“连接程序”(link)的软件&#xff0c;把此“.OBJ”文件与c语言提供的各种库函数连接在一起&#xff0c;生成一个后缀“.EXE”的可执行文件。显然…