上个学期做了很久的新浪爬虫,修修改改一直没时间做个整理,趁着开学前,重新整理了下思路和代码结构,做一个总结吧。

本来是雄心壮志的想实现一个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实现)相关推荐

  1. MOOC《Python网络爬虫和信息提取》(第11次)网络爬虫之框架(第4周)

    MOOC<Python网络爬虫和信息提取>(第11次)网络爬虫之框架(第4周) MOOC–Python网络爬虫和信息提取(第11次开课) 网络爬虫之框架 21.08.10 目录 文章目录 ...

  2. 基于Python实现的网络爬虫项目——多线程下载小说并保存为txt文件(包含完整代码及注释)

    基于Python实现的网络爬虫项目--多线程下载小说并保存为txt文件(包含完整代码及注释) 一.确立预期目标 二.完成项目所需工具 三.项目需要解决的问题 问题一 问题二 问题三 问题四 问题五 问 ...

  3. 基于python的影评数据分析_基于Python聚焦型网络爬虫的影评获取技术

    龙源期刊网 http://www.qikan.com.cn 基于 Python 聚焦型网络爬虫的影评获取技 术 作者:郭向向 郑嘉慧 苗学芹 来源:<时代金融> 2019 年第 11 期 ...

  4. python数据采集系统_基于python的聚焦网络爬虫数据采集系统设计与实现

    基于 python 的聚焦网络爬虫数据采集系统设计与实现 杨国志 ; 江业峰 [期刊名称] < <科学技术创新> > [年 ( 卷 ), 期] 2018(000)027 [摘要 ...

  5. iOS—网络实用技术OC篇网络爬虫-使用java语言抓取网络数据

    网络爬虫-使用java语言抓取网络数据 前提:熟悉java语法(能看懂就行) 准备阶段:从网页中获取html代码 实战阶段:将对应的html代码使用java语言解析出来,最后保存到plist文件 上一 ...

  6. 【Python笔记】网络爬虫——常用框架介绍以及 Scrapy 框架使用

    网络爬虫开发常用框架 Scrapy 爬虫框架 Crawley 爬虫框架 PySpider 爬虫框架 Scrapy 爬虫框架的使用 搭建 Scrapy 爬虫框架 1. 安装 Twisted 模块 2. ...

  7. Python网络爬虫专业级框架_scrapy

    首先感慨下当今的互联网,08年刚来北京工作的时候什么也没有.出去面试全凭一张纸质的北京地图跟一张嘴.学习还停留在看书的阶段(天天上下班的公交车上看书看到睡着,哈哈). 通过这段时间的学习,初步掌握了如 ...

  8. 韦玮python视频教程下载_[课程学习]精通Python网络爬虫核心技术框架与项目实战韦玮PDF附源码 rar文件[101.68MB]-码姐姐下载...

    只需2积分精通精通Python网络爬虫核心技术.框架与项目实战,韦玮.pdf 大小:101.66MB | 2020-05-14 19:06:39 韦玮老师<精通python网络爬虫>源代码 ...

  9. websocket python爬虫_python实现基于websocket协议的网络爬虫

    WebSocket是一种在单个TCP连接上进行全双工通信的协议,简单来说就是建立一个TCP长连接之后,你可以服务器随时可以给客户端发送消息,客户端随时可以给服务器发送消息,而以前只能是客户端给服务器发 ...

最新文章

  1. phpmyadmi 上传大文件
  2. 【9915】乘积最大
  3. java异常处理机制详解
  4. [crypto]-30-The Armv8 Cryptographic Extension在linux中的应用
  5. 内联函数的声明和定义
  6. 分表后需要注意的那些事儿
  7. 存储程序(1)——MYSQL
  8. linux 误删除mysql表能恢复吗,Linux误删数据恢复
  9. idea菜单栏消失如何调整回来
  10. iOS通用链接(Universal Links)突然点击无效的解决方案
  11. 在家吃饭保平安,华人学者研究发现,经常在外就餐增加死亡风险
  12. 自定义Repeater数据控件的一个页面显示效果
  13. 转换大师swf转html,iPixSoft SWF to HTML5 Converter
  14. Flutter HotRealod详解
  15. python正则匹配内网IP
  16. 光标右侧小圆圈一直闪,输入法一直不停中英文切换
  17. 5个适合提升自己的自学网站,每一个都很强大, 适合职场人自我提升的学习网站,利用起来,离加薪更近一步
  18. Polygon与以太坊通信机制研究
  19. 【SCIR Lab】事件表示学习简述
  20. android临时文件夹,【报Bug】安卓端,保存视频到相册成功,临时文件夹中有,但是相册中没有...

热门文章

  1. mysql pre_commit_Git — Pre-commit钩子的使用
  2. python变量的作用域及生命周期_Python——变量的作用域
  3. H3C三层交换机划分VLAN示例
  4. 由“标准C”“纯C”引发的思考
  5. html给页面整体添加左右边距_HTML嵌入页面的几种方法
  6. 3d人脸识别算法opencv_用Opencv打造自己的人脸识别
  7. 【Clickhouse】Clickhouse 整合 Prometheus 监控 运行时状态
  8. 【clickhouse】 clickhouse配置查询记录query_log
  9. 95-34-035-Context-HeadContext和TailContext
  10. 【MySQL】MySQL 界面连接工具 优化工具 监控工具 其他工具 简介