第一篇:自己动手抓数据
读一遍书,单纯抄一点点内容作记录。
- URL 略
- HTTP状态码处理:
代码 | 描述 | 处理 |
---|---|---|
200 | 成功 | 处理 |
202 | 处理未完成 | 等待 |
204 | 没返回信息 | 丢弃 |
300 | 有多个可用的被请求资源 | 能处理就处理 |
301、302 | 重定向 | 重定向 |
304 | 请求资源未更新 | 丢弃 |
400 | 非法请求 | 丢弃 |
401 | 未授权 | 丢弃 |
403 | 禁止 | 丢弃 |
404 | 没有找到 | 丢弃 |
5xx | 服务器错误 | 丢弃 |
- 宽度优先爬虫
#用typora写好贴上来的,才发现不支持流程图
op0=>operation: 初始化URL入队列
cond=>condition: URL队列未空或未达到指定数量
op1=>operation: 退出程序
op2=>operation: 队头URL出队列
op3=>operation: 下载页面
op4=>operation: 输出网页中URL
op5=>operation: 新URL入队列
op0->cond
cond(no)->op1
cond(yes)->op2->op3->op4->op5
需要一个URL队列,一个HashSet来记录访问过的URL
- 带偏好的爬虫
链接受欢迎度由指向当前URL的链接数量和质量决定。重要度可以认为‘.com’比'home'比'.cc'、‘map’重要等。平均链接深度,如认为离种子越近越重要。可以使用优先级队列实现TODO列表。 - 有大量URL时,最适合使用内存数据库,或者直接使用数据库来存储这些URL。为了速度,Hash存储较好。一般Key值选取URL,但为了省空间,对URL进行MD5压缩。Value值通常对URL和相关信息进行封装成对象进行存储。【Berkeley DB 数据库】
- 原始URL(主机部分是IP),URL的值,URL_NUM,状态码,此URL被其他URL引用次数,URL对应文章汉字编码,文章摘要,作者,文章权重,文章描述,文章大小,最后修改时间,过期时间,文章名称,文章类型,引用的链接。爬取层次。
- 企业及搜索常用布隆过滤器创建Visited表。误判率表:
items:bits | 误判率 |
---|---|
1:1 | 0.63212055882856 |
1:2 | 0.39957640089373 |
1:4 | 0.14689159766038 |
1:8 | 0.02157714146322 |
1:16 | 0.00046557303372 |
1:32 | 0.00000021167340 |
1:64 | 0.00000000000004 |
每个URL分配两个字节能达到千分之几的冲突,比较保守的是每个URL分配四个字节。对于5000万URL量级过滤器只占200MB空间,且排重超快。
- 【TODO:爬虫架构】
- 分布式存储,负载均衡。云计算存储模型HBase,开源搜索引擎Nutch【分布式这一块没看懂】
- 避免‘黑洞’
避免动态网页【即URL含问号的网页】,现在几乎网站都在做SEO优化,黑洞已经不那么重要了。 - 主题爬虫
a> 行业搜索,就找固定的几家公司。b> 根据网页内容判断是否与主题相关 ,标题正文超链接中关键词是否有导向词,导向词可以手动设置并给分也可以给一组主题相关网页由程序自动判断共同特征。c> 对网页链接评分。d> 链接描述文本分析 - 限定爬虫
限定域名‘edu.cn’,限定爬取层数,限定中国范围内IP,限定中文页面,等等。纯真IP数据库QQWry.dat,文件结构包括文件头,记录区,索引区,一般用二分法在索引区查到偏移量再去记录区读取。 - 有道德的爬虫
网站根目录下的robots.txt文件,RobottsMeta标签。