基于HttpClient4.0的网络爬虫基本框架(Java实现)
上个学期做了很久的新浪爬虫,修修改改一直没时间做个整理,趁着开学前,重新整理了下思路和代码结构,做一个总结吧。
本来是雄心壮志的想实现一个Java版本的、比较通用的爬虫框架的,但是整理后又发现此法真的是非常的简单粗暴,跟scrapy等没得比,其实没得比都是正常的啦,我自己本来就水,而且没有深入的去进行实现设计,所以,姑且总结一下当前的能力吧。
实现语言:Java
模拟HTTP请求:HttpClient 4.0
目标页面结构分析、HTTP请求头信息分析:Firefox + firebug / Chrome(F12 开发者模式)
HTML解析:Jsoup
基本思路
网络爬虫的基本思路是:爬虫线程从待抓取URL队列中拿取一个URL -> 模拟浏览器GET请求到目标URL -> 将网页内容下载回来 -> 然后对页面的内容进行解析、获取目标数据保存到相应的存储 -> 再以一定的规则从当前抓取的网页中获取接下来需要继续爬取的URL。
当然以上思路是建立在爬取过程无需模拟登录、被爬的网站比较善良不会做一些“反爬”的工作的基础上,然而现实中,模拟登录有时还是非常重要的(如新浪微博);不会反爬的网站也少之又少,当频访问站点时,可能会被冻结账号、封IP、返回“系统繁忙”“请慢点儿访问”等信息。因此需要对爬虫进行健壮性增强:增加对反爬信息的处理、动态切换账号/IP、访问时间delay等。
程序架构
由于模拟登录模块比较复杂,并且不同的网站实现的机制也不尽相同,因此这里只给出一个示意图,下文主要针对不需要进行登录的爬虫进行分析。
Worker:每一个worker就是一个爬虫线程,由主线程SpiderStarter创建
Login(可选):爬虫模拟登录模块,可以设置一个账号队列,一旦账号被冻结,则将其放入队列尾部,并从头部获取一个新账号再次登录。队列的长度需 >= 账号冻结时间 / 每个账号可以支持的连续爬取时间
Fetcher:爬虫模拟浏览器发出GET URL请求,下载页面
Handler:对Fetcher下载的页面进行初步处理,如判断该页面的返回状态码是否正确、页面内容是否为反爬信息等,从而保证传到Parser进行解析的页面是正确的
Parser:对Fetcher下载的页面内容进行解析,获取目标数据
Store:将Parser解析出的目标数据存入本地存储,可以是MySQL传统数据库,也可以Redis等KV存储
待抓取队列:存放需要抓取的URL
已抓取队列:存放已经抓取到的页面的URL
程序流程图
以下为爬虫实现的流程图,图中绿色方框代表这几个步骤是在同一个模块中的,模块名称用红字表明。
代码实现
明天就开学了,再加上实验室的任务,没时间好好写了,写了个比较水的,eclipse工程,大概就是把上面这个流程图给实现了,很多地方需要根据具体的爬取场景进行实现的都用注释说明了,真心希望以后可以封装的漂亮点儿。
丑媳妇见公婆来了。点我看丑 >_<~
最后,附加淘宝搜索团队的两篇关于爬虫的文章,感觉挺好的,很清晰的结构。有时间可以实现部署一下:
定向抓取漫谈
快速构建时时抓取集群
转载于:https://www.cnblogs.com/yuki-lau/archive/2013/02/27/2934672.html
基于HttpClient4.0的网络爬虫基本框架(Java实现)相关推荐
- MOOC《Python网络爬虫和信息提取》(第11次)网络爬虫之框架(第4周)
MOOC<Python网络爬虫和信息提取>(第11次)网络爬虫之框架(第4周) MOOC–Python网络爬虫和信息提取(第11次开课) 网络爬虫之框架 21.08.10 目录 文章目录 ...
- 基于Python实现的网络爬虫项目——多线程下载小说并保存为txt文件(包含完整代码及注释)
基于Python实现的网络爬虫项目--多线程下载小说并保存为txt文件(包含完整代码及注释) 一.确立预期目标 二.完成项目所需工具 三.项目需要解决的问题 问题一 问题二 问题三 问题四 问题五 问 ...
- 基于python的影评数据分析_基于Python聚焦型网络爬虫的影评获取技术
龙源期刊网 http://www.qikan.com.cn 基于 Python 聚焦型网络爬虫的影评获取技 术 作者:郭向向 郑嘉慧 苗学芹 来源:<时代金融> 2019 年第 11 期 ...
- python数据采集系统_基于python的聚焦网络爬虫数据采集系统设计与实现
基于 python 的聚焦网络爬虫数据采集系统设计与实现 杨国志 ; 江业峰 [期刊名称] < <科学技术创新> > [年 ( 卷 ), 期] 2018(000)027 [摘要 ...
- iOS—网络实用技术OC篇网络爬虫-使用java语言抓取网络数据
网络爬虫-使用java语言抓取网络数据 前提:熟悉java语法(能看懂就行) 准备阶段:从网页中获取html代码 实战阶段:将对应的html代码使用java语言解析出来,最后保存到plist文件 上一 ...
- 【Python笔记】网络爬虫——常用框架介绍以及 Scrapy 框架使用
网络爬虫开发常用框架 Scrapy 爬虫框架 Crawley 爬虫框架 PySpider 爬虫框架 Scrapy 爬虫框架的使用 搭建 Scrapy 爬虫框架 1. 安装 Twisted 模块 2. ...
- Python网络爬虫专业级框架_scrapy
首先感慨下当今的互联网,08年刚来北京工作的时候什么也没有.出去面试全凭一张纸质的北京地图跟一张嘴.学习还停留在看书的阶段(天天上下班的公交车上看书看到睡着,哈哈). 通过这段时间的学习,初步掌握了如 ...
- 韦玮python视频教程下载_[课程学习]精通Python网络爬虫核心技术框架与项目实战韦玮PDF附源码 rar文件[101.68MB]-码姐姐下载...
只需2积分精通精通Python网络爬虫核心技术.框架与项目实战,韦玮.pdf 大小:101.66MB | 2020-05-14 19:06:39 韦玮老师<精通python网络爬虫>源代码 ...
- websocket python爬虫_python实现基于websocket协议的网络爬虫
WebSocket是一种在单个TCP连接上进行全双工通信的协议,简单来说就是建立一个TCP长连接之后,你可以服务器随时可以给客户端发送消息,客户端随时可以给服务器发送消息,而以前只能是客户端给服务器发 ...
最新文章
- phpmyadmi 上传大文件
- 【9915】乘积最大
- java异常处理机制详解
- [crypto]-30-The Armv8 Cryptographic Extension在linux中的应用
- 内联函数的声明和定义
- 分表后需要注意的那些事儿
- 存储程序(1)——MYSQL
- linux 误删除mysql表能恢复吗,Linux误删数据恢复
- idea菜单栏消失如何调整回来
- iOS通用链接(Universal Links)突然点击无效的解决方案
- 在家吃饭保平安,华人学者研究发现,经常在外就餐增加死亡风险
- 自定义Repeater数据控件的一个页面显示效果
- 转换大师swf转html,iPixSoft SWF to HTML5 Converter
- Flutter HotRealod详解
- python正则匹配内网IP
- 光标右侧小圆圈一直闪,输入法一直不停中英文切换
- 5个适合提升自己的自学网站,每一个都很强大, 适合职场人自我提升的学习网站,利用起来,离加薪更近一步
- Polygon与以太坊通信机制研究
- 【SCIR Lab】事件表示学习简述
- android临时文件夹,【报Bug】安卓端,保存视频到相册成功,临时文件夹中有,但是相册中没有...
热门文章
- mysql pre_commit_Git — Pre-commit钩子的使用
- python变量的作用域及生命周期_Python——变量的作用域
- H3C三层交换机划分VLAN示例
- 由“标准C”“纯C”引发的思考
- html给页面整体添加左右边距_HTML嵌入页面的几种方法
- 3d人脸识别算法opencv_用Opencv打造自己的人脸识别
- 【Clickhouse】Clickhouse 整合 Prometheus 监控 运行时状态
- 【clickhouse】 clickhouse配置查询记录query_log
- 95-34-035-Context-HeadContext和TailContext
- 【MySQL】MySQL 界面连接工具 优化工具 监控工具 其他工具 简介