NodeJS爬虫

news/2024/7/19 10:47:45 标签: 爬虫, java

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

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


http://www.niftyadmin.cn/n/548418.html

相关文章

java jdk7 环境变量设置_科学网—Java JDK7 的安装以及环境变量的配置(Linux and Windows) - 彭勇的博文...

Java JDK 7 的安装以及环境变量的配置(Linux and Windows)(第4次修改, Final Version)JDK(Java Development Kit)包括了Java语言的编译器,可以在这里下载:根据操作系统选择相应的版本。Java JDK7 在 Windows 8.1 update下的安装以及环境变量的配置在Wind…

python-35:urllib 和 urllib2 模块

2019独角兽企业重金招聘Python工程师标准>>> 首先,urllib 和 urllib2 是python 自带的模块,所以我们可以通过官网文档来查看它们的详细信息,这里依然给出网址,感兴趣的同学可以看一下 urllib模块:http://py…

写一个java集合_身为一个合格的java开发,这些java集合的知识你得知道,写的很细...

数据结构数组队列链表二叉树集合CollectionList集合List集合接口**的实现类 (1) ArrayList(基于数组创建的容器类) 特点:数组结构,增删慢,查找快,每次扩容为原来的1.5倍 格式: ArrayList 引用变量名 new ArrayList<>( ) 三个构造方法1、 无参(创建默认长度为10的集合)2、…

E4A安装了jaVa后还提示_通过wget在Linux上下载Java JDK会显示在许可证页面上

小编典典针对Oracle JDK 11的更新wget --no-check-certificate -c --header "Cookie: oraclelicenseaccept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/1128/55eed80b163941c8885ad9298e6d786a/jdk-11_linux-x64_bin.tar.gz为JDK 10.0.2更新…

c++;双向循环链表

#pragma once//头文件using namespace std;typedef int DataType;class ListNode {friend class DoubleList; private:DataType _data;ListNode* _next;ListNode* _prev; public:ListNode();};class DoubleList { private:ListNode* _pHead;ListNode* _pTail; public:DoubleLis…

Android LayoutInflater详解

2019独角兽企业重金招聘Python工程师标准>>> 在实际开发中LayoutInflater这个类还是非常有用的&#xff0c;它的作用类似于findViewById()。不同点是LayoutInflater是用来找res/layout/下的xml布局文件&#xff0c;并且实例化&#xff1b;而findViewById()是找xml布…

UNITY 2D入门基础教程

Unity4.3增加了原生的2D开发环境&#xff0c;新建项目时选2D http://blog.1vr.cn/?p1422

java 变量所有重命名_Java实现文件批量重命名具体实例

Windows操作系统可以实现重命名文件操作&#xff0c;却不能实现批量重命名。本实例实现了批量重命名功能&#xff0c;可以将一个文件夹内同一类型的文件按照一定的规则批量重命名。用户可以给出重命名模板&#xff0c;程序可以根据模板对相应的文件进行重命名。此外&#xff0c…