首页 » PHP教程 » phpgetheader多线程技巧_小爬虫Java自动生成对象AiPa往往牛逼的轨范员都是被逼出来的

phpgetheader多线程技巧_小爬虫Java自动生成对象AiPa往往牛逼的轨范员都是被逼出来的

访客 2024-10-24 0

扫一扫用手机浏览

文章目录 [+]

1.简介

AiPa 是一款小巧,灵巧,扩展性高的多线程爬虫框架。

phpgetheader多线程技巧_小爬虫Java自动生成对象AiPa往往牛逼的轨范员都是被逼出来的

AiPa 依赖当下最大略的HTML解析器Jsoup。

phpgetheader多线程技巧_小爬虫Java自动生成对象AiPa往往牛逼的轨范员都是被逼出来的
(图片来自网络侵删)

AiPa 只须要利用者供应网址凑集,即可在多线程下自动爬取,并对一些非常进行处理。

2.Maven

直接引入

3.利用

先来看下一个大略完全的示例程序:

必须实现的接口

Main方法

通过AiPa.newInstance()方法直接创建一个新的AiPa实例,该方法必须要传入 AiPaWorker 接口的实现类。

3.1 自定义爬虫方法

在上面的演示程序中,我们利用了submit()方法进行提交任务,默认是利用了Jsoup+上面的那些非加粗属性进行爬取,一样平常情形下够用,如果要一个一个的扩展Jsoup的方法太累了,于是我想到把爬虫方法供应给用户重,让用户自己去扩展,想用什么爬,想设置什么属性都可以。

下面请看利用Demo:

然后,再调用submit方法提交任务,代码示例:

把稳:当你重写爬虫方法后,3.2小节的非加粗属性都会失落效。

3.2 读取返回值与获取线程池

如果你想要读取返回值来看下任务是否实行成功,你可以利用看下上面的程示例序是如何做的。

getFutureList()方法会返回任务实行之后的结果凑集,凑集中的成员都是Future类。
调用Future工具的 get() 方法会等待当前任务实行完成再返回结果值,也便是会壅塞当前哨程。
该类还有很多方法,比如get(long timeout, TimeUnit unit),设置等待韶光等等。

该方法会返回AiPa当前利用的Executor线程池,你获取到该线程池后,须要一些利用线程池的一些方法可以自行利用。

3.3 如何应对爬取网页时的非常

对付网页爬取时的非常,这真的是个痛点。
缘故原由真的很多,你的网络弗成,网站做事器的网络弗成,在网上有说把要求头中Connection设置为close,不用keep-alive。
这个以我爬取几百兆数据的履历见告你,然并卵。

于是我想出了一种无赖打法,反复爬。
爬一次弗成就两次,爬两次弗成就三次,只要网页是可以正常相应的,基本这个策略没多少问题。
当然,万一真的是某个网页就那么独树一帜呢,以是我们设置一个最大值,对付爬取超过最大值的,放弃记录下来,看看啥子情形。
在我的这个框架中,也给出了fail()方法专门处理这个问题。

3.4 AiPaWorker接口

AiPaWorker 接口是用户必须要实现的业务类。

该接口方法如下:

run()方法是用户自定义处理爬取的HTML内容,一样平常是利用Jsoup的Document类进行解析,获取节点或属性等,然后保存到数据库或本地文件中。
如果在业务方法须要再次要求URL,可以利用工具类Util。

fail()方法是当run()方法涌现非常或爬取网页时非常,多次处理无效的情形下进入的方法,该方法的参数为这次出错的网址。
一样平常是对其进行日志记录等操作。

3.5 解码,最多失落败次数,要求头

通过AiPa获取实例后,可以直接在后面随着设置一大堆属性,比如:setCharset、setThreads、setMaxFailCount等,这些属性啥意思,下面以表格的形式解释一下:

方法解释setThreads事情线程数,默认CPU数量+1,你也可以设置CPU2等等setMaxFailCount最大失落败次数,也便是爬网站涌现非常,再次爬一共考试测验多少次,默认5setCharset网页的编码,碰到乱码设置这个,默认UTF-8setHeader设置要求头,只接管Map<String,String>类型,默认nullsetMethod设置要求方法,默认Method.GETsetTimeout要求解析的等待韶光,默认30秒。
setUserAgent设置要求的UA,默认电脑版。
setCookies设置Cookie凑集,默认null

上面的一样平常情形下够用了,如果对这些不满意,嫌太少啥的,下面给了更精良的办理方案。

4.测试用例

在Java SE测试中。
没有利用数据库等,直接掌握台打印是没问题的。

在Spring Boot中写了个测试用例,爬取数据保存到数据库,运行也没问题。

声明:本文内容来源于网络,如有侵权请联系删除

标签:

相关文章

执业药师试卷代码解码药师职业发展之路

执业药师在药品质量管理、用药安全等方面发挥着越来越重要的作用。而执业药师考试,作为进入药师行业的重要门槛,其试卷代码更是成为了药师...

PHP教程 2025-02-18 阅读1 评论0

心灵代码主题曲唤醒灵魂深处的共鸣

音乐,作为一种独特的艺术形式,自古以来就承载着人类情感的表达与传递。心灵代码主题曲,以其独特的旋律和歌词,唤醒了无数人的灵魂深处,...

PHP教程 2025-02-18 阅读1 评论0

探寻福建各市车牌代码背后的文化内涵

福建省,地处我国东南沿海,拥有悠久的历史和丰富的文化底蕴。在这片充满魅力的土地上,诞生了许多具有代表性的城市,每个城市都有自己独特...

PHP教程 2025-02-18 阅读1 评论0

探寻河北唐山历史与现代交融的城市之光

河北省唐山市,一座地处渤海之滨,拥有悠久历史和独特文化的城市。这里既是古丝绸之路的起点,也是中国近代工业的发源地。如今,唐山正以崭...

PHP教程 2025-02-18 阅读1 评论0