文档章节

爬虫体系技术架构

e
 eagle
发布于 2017/05/23 15:50
字数 1318
阅读 39
收藏 0

1.总述 

    在构建爬虫体系的时候,参考了现在的各种爬虫框架,如:python的scrapy框架,java的webmagic等等,但是都有一些问题
无法回避,即:如果抓取的网页特别多,不是几百上千个,而是以万为单位来计数的话,怎么办?不可能每个url地址都去写解析,
都在线抓取,那么怎么设计一个通用的爬虫流程处理体系,尽量少写代码,利用开放式的插件体系与参数配置来解决这个问题,
就显的尤为重要.本文就针对这个问题,进行如下方案设计.针对这个问题,我们将爬虫设计为4个阶段:初始化任务阶段(url地址的
初始化),下载阶段(download,将url地址对应的内容下载为服务器上的txt文本),解析阶段(解析内容,以及发现新的url地址),
数据入库(数据存储,入mongodb或者其他类型的数据库).这样就能将整个过程进行流程化处理.

2.任务作业设计

    在这里,利用库表的方式进行爬虫任务的设计工作.如果以后数据量比较大,可以考虑分库分表的方式来做.当然,当量很大的时候,对url地址的过滤,有点问题,可采取redis过滤或者利用md5主键过滤或者BloomFilter过滤,方法很多,可自行选择。

3.任务的初始化操作

在任务的初始化阶段,由于外界因素比较多,那么如何在多变的外界环境下,统一生成url任务呢?我们先来分析外界因素有哪些?
1.搜索型的.例如利用关键字来查询.此时给出的外界因素就是一个excel文件,那么我们如何设置输入参数呢?
  url:http://www.xxx.com/searchAll
  requestMethod:post
  jsonParam:{t:now()}
  jsonPostParam:{objectType:2}
  paramFileName:/Users/dev/data/1.xls(或者windows下的路径)
  这个xls可能很大,也可能很小,怎么处理?有可能是一个字段,有可能是多个字段.now()为Long类型的毫秒数,
这个视情况而定,为自定义的.
2.在解析文本之后,才发现新的URL任务地址,此时就需要在解析器中进行设置初始化任务。初步考虑是利用xml配置来实现解析任务.
根据解析规则来实现任务的初始化操作

4.数据下载

在这里,利用HttpClient4.5.2来实现针对post和get不同方式下的数据下载任务
在这里,需要注意以下几个因素
1.ip代理的问题.需要自己准备一个ip代理池.如果抓取频率太高,很容易导致IP被封
2.抓取的RequestHeader设置,一般来说,需要设置如下几个参数:
  userAgent:(一般情况,会有一个UserAgent列表,每次随机获取一个)
        Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 
        (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36
  Proxy-Connection:keep-alive
  Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
  Accept-Encoding:gzip, deflate, sdch
  Accept-Language:zh-CN,zh;q=0.8
  Cache-Control:max-age=0
  Host:www.xxx.com
  Referer:http://www.xxx.com/

5.数据解析

根据数据格式的不同,可以分为以下几种数据格式
1.html格式:利用xpath来解析.这里需要注意几点,有可能在此过程中,同时有明细和列表页以及新的url任务的获取等操作.
  需要明确对待
2.json格式:需要明确,有可能是个列表页,含有pageNumber等字段,需要解析JSONArray再获取内容;
  也有可能直接解析一个JSONObject
3.javascript格式:这类数据比较特殊,目前我看到的,有一个数组格式的,有json格式的,都基本是如下定义的:
    var Data_ACWorthTrend = [[1438272000000,1.0],[1438617600000,1.0],[1438876800000,1.0]];

    var Data_performanceEvaluation = 
      {"avr":"51.50",
       "categories":["选证能力","收益率","跟踪误差","超额收益","管理规模"],
       "dsc":["反映基金挑选证券而实现风险调整\u003cbr\u003e后获得超额收益的能力",
              "根据阶段收益评分,反映基金的盈利能力","根据基金跟踪指数的密切程度评分",
              "反映基金投资的超额风险所带来的超额收益","根据基金的资产规模评分"],
       "data":[60.0,60.0,50.0,50.0,50.0]
     };

6.数据入库

    在这里,为了实现的方便,可以考虑mongodb来存储数据,如果条件受限,采取mysql等也可以,唯一区别是mysql需要建表,
针对不同的抓取任务建立不同的数据表,而mongodb则不需要建表.针对这种方式,可以视自己的情况而定

7.ip代理池

在ip代理这块,可以考虑开源的python实现的IP代理池 IPProxyPool.我们采取的方案是代理池中的ip用python实现,
然后入mysql数据库,然后单独提供一个API接口(用java实现,RPC接口)供其他方调用,尽量保证IP的调用频率在同一个级别上,
确保不会出现某些IP调用次数过大,某些IP调用频率过低的情况。这个算法与url任务中的domain域有关.

 

© 著作权归作者所有

e
粉丝 1
博文 1
码字总数 1318
作品 0
海淀
私信 提问
高手问答第 158 期 —— 企业大数据系统构建实战

OSCHINA 本期高手问答(2017 年 6 月 21 日 — 6 月 27 日)我们请来了@ethan888 吕兆星为大家解答关于企业大数据方面的问题。 吕兆星,资深大数据技术专家,精通基于大数据的分布式数据挖掘...

局长
2017/06/20
3.5K
36
网络机器人出没,如何利用大数据技术实时识别和防护 | 硬创公开课预告

保守估计,互联网约50%~60%的流量由网络机器人贡献,航空票务、政府公示、社保信息、公积金信息、招聘简历等,都是网络爬虫的重灾区。网络爬虫不但虚耗资源,影响正常用户体验,还容易导致信...

又田
2018/01/02
0
0
产品评测|阿里云入围《New Tech:Bot Management》评测报告第一阵营

目前互联网中很多批量流量都是Bot(自动化程序)所产生的。这使得恶意攻击变得更加容易,黑客利用这些自动化程序可以进行业务攻击和欺诈,例如撞库、占座、抢票、刷排名、爬取网页内容、接口...

云安全专家
2018/10/31
0
0
大数据征信进入洗牌期,区块链或成新一代征信系统底层架构

由于中国的消费金融需求旺盛但服务相对落后的行业特点,导致行业内数据滥用现象严重。 此前,人民银行征信中心副主任汪路在公开场合表示,在当前征信体系已经严重滞后于经济、金融发展需求的...

北丐09
2018/04/23
0
0
NGINX优化之路(二)WEB安全篇

NGINX优化之路(二)WEB安全篇 2016年10月27日 一、Nginx gzip 压缩的优点  1.提升网站用户体验:由于发给用户的内容小了,用户访问单位大小的页面就快了,用户体验度提升。  2.节约网站带...

凛冬一壶酒
2018/06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
昨天
5
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
昨天
6
0
数据库中间件MyCat

什么是MyCat? 查看官网的介绍是这样说的 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵...

沉浮_
昨天
6
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
昨天
7
0
常用物流快递单号查询接口种类及对接方法

目前快递查询接口有两种方式可以对接,一是和顺丰、圆通、中通、天天、韵达、德邦这些快递公司一一对接接口,二是和快递鸟这样第三方集成接口一次性对接多家常用快递。第一种耗费时间长,但是...

程序的小猿
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部