爬虫之旅

来源:互联网 发布:搜狐网络大厦4楼 编辑:程序博客网 时间:2024/05/11 01:37

一、爬虫工作理念

1、检验爬虫是否正常的唯一标准

每隔一段时间就检查爬取的页数和爬取的数据个数是否相匹配,并大致查看数据是否存在异常。时间间隔依次递增,如:第一次10分钟,第二次半小时,第三次一小时,之后间隔时间倍增。

检查数据是否正常的方式:

1)查询总记录数是否和爬取的页面数成正比。

2)使用distinct查询主字段不重复的总数记录有多少,如name:select count(distinct name) from person。

3) 查询version字段的值大于等于1的记录是不是正常数据且有多少。

4)查看次要字段为空的记录是否正常。

2、爬虫技术线

1)、编写爬虫获取数据,异常处理和打印日志,rest接口,集成权限管理系统,前台技术:sitemesh,bootstrap和jsoup

2)、使用reids或kafka等消息组件搭建分布式系统

3)、解决ip代理问题,如自己搭建ip代理服务。

4)、破解验证码,如:极验验证码

5)、存储方面:结构化数据采用mysql、非结构话数据采用mongodb、或使用hadoop存储web页面

6)、监控系统:机器性能监控(echart和sigar)、网页更新监控、数据源服务器压力监控(控制爬取频率)、反爬检测系统

7)、日志系统:flume

8)、拆分爬虫系统为爬虫管理系统(控制爬虫任务)、downloader系统、解析与入库系统、

9)、搭建微服务系统:dubbo、微服务的不足:本地数据操作和远程数据操作的事物问题

10)、语义解析和拆词器

11)、搜索引擎:hadoop存储和lucene检索,现有框架:nutch

12)、机器学习

13)、数据挖掘

3、爬虫最重要的数据是企业名录和个人名录,来源网站:工商网站,信用中国(地方信用网站也行)、中国招标网、顺企网、天眼查和企查查

4、爬虫的数据累计过程:数据积累和增量爬取

5、爬虫策略:网页爬取、网站爬取和全网爬取(横向爬取,深度爬取,主题爬取(灰度爬取))

6、爬虫累计数据工作原则:一个是上班、下班预留10~20分钟检查爬虫爬取状态和数据状态,一个是10点左右检查爬虫爬取状态和数据状态,
7、爬虫接口工作原则:接口变动一定要通知对方,理清责任。
二、如何建立一个实用性高的商业数据库?
1、爬虫有以下几个问题需要处理
1)、用户查询爬虫数据存在以下问题情况:1、用户输入脏数据(不管是有意的还是无意的)。2、用户输入正常数据:存在有、无数据的情况,上边的三种情形我们数据库都需要考虑到。
2)、a)按需爬取和全量爬取如何结合,b)如果按需爬取是大量存在的话,又如何和全量爬取结合。按需全量结合方案中的按需是直接启动爬虫爬取还是走消息队列?
2、解决方案:创建企业/个人名录,根据企业名录查询各种类型数据,并把每个公司的指定类型数据作为标签添加到企业/个人名录表。
1)、首先我们有一个企业/个人名录表,假设它是一个完整的企业/个人名录表,我们为每个公司打一个数据标签,用户发来一个用户请求。首先要去名录表检查是否存在该公司。如果不存在该公司,我们就返回‘不存在该公司’,如果存在就去数据库查询该数据。
2)、事实上,我们很难保证一个跟工商局一模一样的企业/个人名录表,这里的难点在于刚注册的新公司。所以我们在前台应该有一个属性来标识这是否是一个新公司。假设名录不存在一个公司的话就去工商局查询是否存在这家公司,如果不存在,查询该公司的所有数据并更新企业/个人名录表。如果名录存在这个公司就执行第一个假设方案。当然第二个假设方案代价太大,我们也可以这样处理,就是以名录为标准,不存在就直接返回不存在该公司。用户可以申请手工查询。
3)、商业数据存在各种各样的复杂情况。其中一种就是各种类型的数据,他们的更新情况是不一样的。我们可以分为两种:a、实时更新数据,实时更新数据我们可以自己定义,例如当天产生的新数据b、非实时更新数据。如果是实时更新数据,我们要做的就是按需查询并确定这种数据准确的爬取时间,把所需时间返回给用户。
想要达到以上效果的前提就是有一个完整的企业/个人的名录表,然后根据不同的数据类型更新策略制定不同的接口返回数据内容。
=========上边的内容有3个关键点:1、完整的名录2、按需抓取不同类型数据的平均时间3、批量抓取的更新策略==========
---------------上边想要的效果是在增量更新期要达到的------------
我们现在处于数据累积期,也就是增量更新期的前一个阶段,就需要制定一个过渡方案,目标是增量更新期的数据库为战略目标,同时使自身数据可商业化。
解决方案:
1、不同数据类型的抓取壁垒难易度是不一样的,这可以分成两种:可以达到全量数据入库,不可达到全量数据入库。可以达到全量数据入库的按增量更新期解决方案返回字段,不可达到全量数据入库的话,有数据直接返回,无数据返回“该对象已加入爬虫队列,请*分钟后再次查询”,*:取决于抓取该类型数据的平均时间,其他情况根据名录标签状态以返回适当字段。在名录中对应公司的对应标签中更改状态,状态可以分为:0、正在爬取,1、成功,2、失败,3、不存在该公司,由于是一个收费接口,倒不用过于害怕用户使用脏数据查询,同时该标签还要存储更新时间字段,根据数据类型的更新间隔以判断是否需要重新爬取。
=========上边内容有4个关键点:1、可以爬取工商网站2、名录表3、数据类型表4、标签表(名录-数据类型对应表)5、数据类型更新详情表6、数据更新监控

0 0