NodeJS爬虫

592 查看

【毕设做搜索引擎,先搭爬虫系统,挖个坑慢慢写。】

基于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核开两个线程,多台服务器一起抓。