【毕设做搜索引擎,先搭爬虫系统,挖个坑慢慢写。】
基于phantomjs,语言是java,之前纠结了很久用java还是用node。因为后续还有分词、建索引balabala的,java有很多成熟的框架可以直接用。
今天听海洋大大的一句话:“年轻人才会纠结用什么语言”
爬虫部分
爬虫分三大功能块级:
1.downloader 请求模块,对指定URL发起请求
2.pageProcess 处理抓回来的页面代码,过滤代码取出文本
3.pipeLine 数据库操作
一、Downloader
基于phantomjs模块,对指定的url进行抓取,返回原生代码。
为什么要用phantomjs呢?因为可以完美解决页面数据异步加载问题,省时省力省心哈哈哈哈~~!
坑
(一)抓取的URL服务器挂掉了,需要等待很久。
解决方案:建立url黑名单,设置最大超时时间为15s,超过加载时间3次的url列入黑名单。下次再碰到该url直接跳过。
(二)网站特别慢,需要加载几十秒才能返回全部数据。
解决方案:同上
(三)flash页面无法抓取,主要是页游页面。
解决方案:还木有解决哈哈哈哈。
二、pageProcess
处理页面代码模块。downloader抓回来的源代码推送到这里。
1、各种字符串处理,去掉多余的html,留下文本,推入已抓取数据。
2、借用cheerio,筛选出源码里面的url,经过pipeLine推入待抓取队列。
助攻爬虫部分
一、排重
排重分两部分:1、URL排重,2、数据排重。
URL排重利用Bloom Filter,很容易实现。
数据排重:由于大量网站显示的内容类似,因此只要抓取一个就行了。如何排重?还没准备好算法。数据量比较大,,每抓取一次都遍历?二分法用上了。
二、线程
每个CPU核开两个线程,多台服务器一起抓。