北大青鸟设计培训:Java多线程爬虫实现?一、需求1.定时抓取固定网站新闻标题、内容、发表时间和来源 。
2.程序需要支持分布式、多线程 二、设计1.网站是固定,但是未来也可能添加新java爬虫代码怎么实现的网站去抓取,每个网站内容节点设计都不一样,这样就需要支持动态可配置来新增网站以方便未来的扩展 , 这样就需要每次都需要开发介入 。
2.网站html节点的结构可能发生变化 , 所以也要支持提取节点可配置 。
3.怎样支持分布式?暂时最简单的想法就是:多机器部署程序,还有新搞一台或者部署程序其中一台制作一个定时任务,定时开启每台机器应该抓取哪个网站,暂时不能支持同一个网站同时可以支持被多台机器同时抓取,这样会比较麻烦,要用到分布式队列 。
所以暂时一个网站同时只会被单台机器抓取 。
4.多线程 , 怎样多线程?多线程抓取java爬虫代码怎么实现我这边有两个实现:(1)一个线程抓取一个网站,维护一个自己的url队列做广度抓?。?同时抓取多个网站 。
如图:(2)多个线程同时抓取不同的网站 。
如图:以上两张办法其实各有优点 , 也给有缺点 , 看我们怎么取舍了 。
方法1:每个线程创建一个自己的队列,图中的queue可以不用concurrentQueue,优点:不涉及到控制并发,每个网站一个线程抓取一个网站,抓取完毕即自动回收销毁线程 。
控制方便 。
缺点:线程数不可以扩展,例如当只有3个网站,你最多只能开3个线程来抓取 , 不能开更多 , 有一定的局限性 。
方法2:N个线程同时抓取N个网站,线程数和网站数目不挂钩,优点:线程数可以调整并且和和抓取网站数量无关 。
3个网站我们可以开4个5个或者10个这个可以根据您的硬件资源进行调整 。
缺点:需要控制并发,并且要控制什么时候销毁线程(thread1空闲 , 并且queue为空不代表任务可以结束 , 可能thread2结果还没返回),当被抓取的网站响应较慢时 , 会拖慢整个爬虫进度 。
三、实现抓取方式最终还是选择了方法二,因为线程数可配置java爬虫代码怎么实现!使用技术:jfinal用了之后才发现这东西不适合,但是由于项目进度问题,还是使用了 。
maven项目管理jettyservermysqleclipse开发项目需要重点攻破的难点:(1)合理的控制N个线程正常的抓取网站,并且当所有线程工作都完成了并且需要抓取的队列为空时,N个线程同时退出销毁 。
(2)不同网站设计节点不一样,需要通过配置解决各个网站需要抓取的URL和抓取节点内容在html节点的位置 。
(3)个性化内容处理,由于html结构设计问题,北大青鸟认为抓取的内容可能有些多余的html标签,或者多余的内容该怎么处理 。
如何用java爬虫爬取招聘信息1、思路:
明确需要爬取java爬虫代码怎么实现的信息
分析网页结构
分析爬取流程
优化
2、明确需要爬取的信息
职位名称
工资
职位描述
公司名称
公司主页
详情网页
分析网页结构
3、目标网站-拉勾网
网站使用json作为交互数据java爬虫代码怎么实现,分析json数据,需要的json关键数据
查看需要的信息所在的位置,使用Jsoup来解析网页
4、分析爬取流程
1.获取所有的positionId生成详情页,存放在一个存放网址列表中ListString joburls
2.获取每个详情页并解析为Job类 , 得到一个存放Job类的列表ListJob jobList
3.把ListJob jobList存进Excel表格中
推荐阅读
- 如何理解电商商务文案岗位,电子商务文案岗位认知
- 斗鱼直播的信息架构图,斗鱼主播管理平台
- python可变函数名 python 可变
- 包含如何利用新媒体宣传二十大的词条
- 国内自己的赛车游戏,赛车游戏排行知乎
- 手机怎么设置停机显示号码,手机怎么设置停机显示号码呢
- linux命令怎么关闭 linux命令怎么关闭运行中用户并删除
- 微信视频号直播播什么内容,微信视频号直播效果怎么样
- 启动虚拟机服务,开启虚拟机服务