开源php爬虫开源框架框架各有什么优缺点

1. larbin简介(百度百科)&&& larbin是一种开源的网络爬虫/网络蜘蛛,由法国的年轻人S&bastien Ailleret独立开发,用c++语言实现。larbin目的是能够跟踪页面的url进行扩展的抓取,最后为搜索引擎提供广泛的数据来源。 Larbin只是一个爬虫,也就是说larbin只抓取网页,至于如何parse的事情则由用户自己完成。另外,如何存储到数据库以及建立索引的事情 larbin也不提供。& latbin最初的设计也是依据设计简单但是高度可配置性的原则,因此我们可以看到,一个简单的larbin的爬虫可以每天获取500万的网页,实在是非常高效。& 利用larbin,我们可以轻易的获取/确定单个网站的所有联结,甚至可以镜像一个网站;也可以用它建立url 列表群,例如针对所有的网页进行 url retrive后,进行xml的联结的获取。或者是 mp3,或者定制larbin,可以作为搜索引擎的信息的来源。
2. 高效的larbin&&& 简介中提到larbin是一个非常高效的爬虫,但没有说明为什么。这里尝试列出几个原因。此外,由于接触爬虫的时间尚短,没发现的地方,希望各位能补充下。a. 节省空间的hash容器。在larbin中,hash的主要用途是判重,因此没必要将元素的值记录到hash表中。于是就使用一个位图保存hash code,根据位图某个位是否为1,判断某个元素是否在hash表中。当要插入一个新元素时,就将hash code对应的位置1。这样说可能不容易明白,举个例吧。假设int为32位,位图为int bitmap[100],元素A的hash code为120,将元素A插入到hash容器就是将bitmap的第120位置1,即bitmap[120/32] | (1 && 120%32)。b. 减少dns次数。对于一个站点,使用一次dns解析出IP地址后,下次再遇到该站点的其它网页,就用IP地址替换域名。c. 异步连接。使用单线程非阻塞的方法进行socket连接,充分利用了网络资源和CPU资源。
3. larbin的大致流程&&& larbin的大致流程可以从main.cc看出,这里去掉不重要语句,给出关键语句形成的流程,并加上注释。int main(int argc, char *argv[]) {
  global glob(argc, argv)& //使用配置文件初始化global类中的成员变量
  for(; ;) {&&&&&&& &waitbandwidth()&&//如果用户设置了最大带宽,则由此函数保证带宽的使用情况 &&&&&&& &input()&&//接收用户的输入,得到初始URL列表&   sequencer()&//按优先度将URL放到待爬取站点
   fetchDns()&//对站点名即host,进行DNS请求
   fetchOpen()&//从DNS解析成功的站点中,取出一些URL进行socket连接&
   checkAll()&//下载网页,提取URL,并执行用户定制的网页分析  }& }&&
4. larbin的关键函数&&& 这一节主要使用伪代码说明第3节列出的函数是怎样工作的。// wait to limit bandwidth usagewaitBandwidth() {&  while( 剩余带宽 & 0 ) {&&    等10ms&&    if( socket超时 )&   更新待爬取的url数量&&    更新剩余带宽&  }}
//input() {&  初始化webServe,等待用户连接&  接收用户输入,包括优先度,深度,抓取模式,初始URL列表&  从初始URL得到hostName,portNumber,fileName&  按优先度将URL放到待爬取队列}
//start the sequencersequencer() {&  得到一轮(perCall)可以加载URL的数量(存放在变量still中)&  根据URL的优先级加载最多still条URL到待爬取站点}
//O this function perform dns calls, using adnsfetchDns() {&  从dnsSite取出hostName,发送dns解析请求(发送数量受最大连接数限制)&  接收dns解析结果&  if(解析成功) {&&    获取并解析该host的robots.txt&&    保存URL到okSites&  }&&}
//O Never block (only opens sockets on already known sites) ; work inside the main threadfetchOpen() {&  while( 空闲连接数 ) {&&    从okSites取出一个URL&&    if( 成功打开socket ) {&&&      向conn填写一些信息&&&&&      减少一个空闲连接&&    }&  }}
//read fill fd_ give back max fdscheckAll() {&  for( 每个连接 ) {&&    switch( 连接状态 ) {&&&      case connecting : 检查是否socket错误,若不是,则将状态转为write,break&&&&&      case write : 写socket请求,将状态转为open,break&&&      case open : 读网页,分析网页,提取链接(endInput函数),状态转为empty,break&&    }&  }
&  for( 每个连接 )&更新pollfds数组的状态(与异步IO有关)}
5. 参考文献&
&&&& 以下是我看larbin源码时,对我帮助很大的文献。
a. larbin官网
b. larbin的配置和使用
c. 从larbin看互联网爬虫设计
d. Linux网络编程入门
e. adns官网
阅读(...) 评论()开源爬虫框架各有什么优缺点? -- 36大数据 -- 传送门
开源爬虫框架各有什么优缺点?
作者:老夏开发网络爬虫应该选择Nutch、Crawler4j、WebMagic、scrapy、WebCollector还是其他的?这里按照我的经验随便扯淡一下:上面说的爬虫,基本可以分3类:1.分布式爬虫:Nutch2.JAVA单机爬虫:Crawler4j、WebMagic、WebCollector3. 非JAVA单机爬虫:scrapy第一类:分布式爬虫爬虫使用分布式,主要是解决两个问题:1)海量URL管理2)网速现在比较流行的分布式爬虫,是Apache的Nutch。但是对于大多数用户来说,Nutch是这几类爬虫里,最不好的选择,理由如下:1)Nutch是为搜索引擎设计的爬虫,大多数用户是需要一个做精准数据爬取(精抽取)的爬虫。Nutch运行的一套流程里,有三分之二是为了搜索引擎而设计的。对精抽取没有太大的意义。也就是说,用Nutch做数据抽取,会浪费很多的时间在不必要的计算上。而且如果你试图通过对Nutch进行二次开发,来使得它适用于精抽取的业务,基本上就要破坏Nutch的框架,把Nutch改的面目全非,有修改Nutch的能力,真的不如自己重新写一个分布式爬虫框架了。2)Nutch依赖hadoop运行,hadoop本身会消耗很多的时间。如果集群机器数量较少,爬取速度反而不如单机爬虫快。3)Nutch虽然有一套插件机制,而且作为亮点宣传。可以看到一些开源的Nutch插件,提供精抽取的功能。但是开发过Nutch插件的人都知道,Nutch的插件系统有多蹩脚。利用反射的机制来加载和调用插件,使得程序的编写和调试都变得异常困难,更别说在上面开发一套复杂的精抽取系统了。而且Nutch并没有为精抽取提供相应的插件挂载点。Nutch的插件有只有五六个挂载点,而这五六个挂载点都是为了搜索引擎服务的,并没有为精抽取提供挂载点。大多数Nutch的精抽取插件,都是挂载在“页面解析”(parser)这个挂载点的,这个挂载点其实是为了解析链接(为后续爬取提供URL),以及为搜索引擎提供一些易抽取的网页信息(网页的meta信息、text文本)。4)用Nutch进行爬虫的二次开发,爬虫的编写和调试所需的时间,往往是单机爬虫所需的十倍时间不止。了解Nutch源码的学习成本很高,何况是要让一个团队的人都读懂Nutch源码。调试过程中会出现除程序本身之外的各种问题(hadoop的问题、hbase的问题)。5)很多人说Nutch2有gora,可以持久化数据到avro文件、hbase、mysql等。很多人其实理解错了,这里说的持久化数据,是指将URL信息(URL管理所需要的数据)存放到avro、hbase、mysql。并不是你要抽取的结构化数据。其实对大多数人来说,URL信息存在哪里无所谓。6)Nutch2的版本目前并不适合开发。官方现在稳定的Nutch版本是nutch2.2.1,但是这个版本绑定了gora-0.3。如果想用hbase配合nutch(大多数人用nutch2就是为了用hbase),只能使用0.90版本左右的hbase,相应的就要将hadoop版本降到hadoop 0.2左右。而且nutch2的官方教程比较有误导作用,Nutch2的教程有两个,分别是Nutch1.x和Nutch2.x,这个Nutch2.x官网上写的是可以支持到hbase 0.94。但是实际上,这个Nutch2.x的意思是Nutch2.3之前、Nutch2.2.1之后的一个版本,这个版本在官方的SVN中不断更新。而且非常不稳定(一直在修改)。所以,如果你不是要做搜索引擎,尽量不要选择Nutch作为爬虫。有些团队就喜欢跟风,非要选择Nutch来开发精抽取的爬虫,其实是冲着Nutch的名气(Nutch作者是Doug Cutting),当然最后的结果往往是项目延期完成。如果你是要做搜索引擎,Nutch1.x是一个非常好的选择。Nutch1.x和solr或者es配合,就可以构成一套非常强大的搜索引擎了。如果非要用Nutch2的话,建议等到Nutch2.3发布再看。目前的Nutch2是一个非常不稳定的版本。第二类:JAVA单机爬虫这里把JAVA爬虫单独分为一类,是因为JAVA在网络爬虫这块的生态圈是非常完善的。相关的资料也是最全的。这里可能有争议,我只是随便扯淡。其实开源网络爬虫(框架)的开发非常简单,难问题和复杂的问题都被以前的人解决了(比如DOM树解析和定位、字符集检测、海量URL去重),可以说是毫无技术含量。包括Nutch,其实Nutch的技术难点是开发hadoop,本身代码非常简单。网络爬虫从某种意义来说,类似遍历本机的文件,查找文件中的信息。没有任何难度可言。之所以选择开源爬虫框架,就是为了省事。比如爬虫的URL管理、线程池之类的模块,谁都能做,但是要做稳定也是需要一段时间的调试和修改的。对于爬虫的功能来说。用户比较关心的问题往往是:1)爬虫支持多线程么、爬虫能用代理么、爬虫会爬取重复数据么、爬虫能爬取JS生成的信息么?不支持多线程、不支持代理、不能过滤重复URL的,那都不叫开源爬虫,那叫循环执行http请求。能不能爬js生成的信息和爬虫本身没有太大关系。爬虫主要是负责遍历网站和下载页面。爬js生成的信息和网页信息抽取模块有关,往往需要通过模拟浏览器(htmlunit,selenium)来完成。这些模拟浏览器,往往需要耗费很多的时间来处理一个页面。所以一种策略就是,使用这些爬虫来遍历网站,遇到需要解析的页面,就将网页的相关信息提交给模拟浏览器,来完成JS生成信息的抽取。2)爬虫可以爬取ajax信息么?网页上有一些异步加载的数据,爬取这些数据有两种方法:使用模拟浏览器(问题1中描述过了),或者分析ajax的http请求,自己生成ajax请求的url,获取返回的数据。如果是自己生成ajax请求,使用开源爬虫的意义在哪里?其实是要用开源爬虫的线程池和URL管理功能(比如断点爬取)。如果我已经可以生成我所需要的ajax请求(列表),如何用这些爬虫来对这些请求进行爬取?爬虫往往都是设计成广度遍历或者深度遍历的模式,去遍历静态或者动态页面。爬取ajax信息属于deep web(深网)的范畴,虽然大多数爬虫都不直接支持。但是也可以通过一些方法来完成。比如WebCollector使用广度遍历来遍历网站。爬虫的第一轮爬取就是爬取种子集合(seeds)中的所有url。简单来说,就是将生成的ajax请求作为种子,放入爬虫。用爬虫对这些种子,进行深度为1的广度遍历(默认就是广度遍历)。3)爬虫怎么爬取要登陆的网站?这些开源爬虫都支持在爬取时指定cookies,模拟登陆主要是靠cookies。至于cookies怎么获取,不是爬虫管的事情。你可以手动获取、用http请求模拟登陆或者用模拟浏览器自动登陆获取cookie。4)爬虫怎么抽取网页的信息?开源爬虫一般都会集成网页抽取工具。主要支持两种规范:CSS SELECTOR和XPATH。至于哪个好,这里不评价。5)爬虫怎么保存网页的信息?有一些爬虫,自带一个模块负责持久化。比如webmagic,有一个模块叫pipeline。通过简单地配置,可以将爬虫抽取到的信息,持久化到文件、数据库等。还有一些爬虫,并没有直接给用户提供数据持久化的模块。比如crawler4j和webcollector。让用户自己在网页处理模块中添加提交数据库的操作。至于使用pipeline这种模块好不好,就和操作数据库使用ORM好不好这个问题类似,取决于你的业务。6)爬虫被网站封了怎么办?爬虫被网站封了,一般用多代理(随机代理)就可以解决。但是这些开源爬虫一般没有直接支持随机代理的切换。所以用户往往都需要自己将获取的代理,放到一个全局数组中,自己写一个代理随机获取(从数组中)的代码。7)网页可以调用爬虫么?爬虫的调用是在Web的服务端调用的,平时怎么用就怎么用,这些爬虫都可以使用。8)爬虫速度怎么样?单机开源爬虫的速度,基本都可以讲本机的网速用到极限。爬虫的速度慢,往往是因为用户把线程数开少了、网速慢,或者在数据持久化时,和数据库的交互速度慢。而这些东西,往往都是用户的机器和二次开发的代码决定的。这些开源爬虫的速度,都很可以。9)明明代码写对了,爬不到数据,是不是爬虫有问题,换个爬虫能解决么?如果代码写对了,又爬不到数据,换其他爬虫也是一样爬不到。遇到这种情况,要么是网站把你封了,要么是你爬的数据是javascript生成的。爬不到数据通过换爬虫是不能解决的。10)哪个爬虫可以判断网站是否爬完、那个爬虫可以根据主题进行爬取?爬虫无法判断网站是否爬完,只能尽可能覆盖。至于根据主题爬取,爬虫之后把内容爬下来才知道是什么主题。所以一般都是整个爬下来,然后再去筛选内容。如果嫌爬的太泛,可以通过限制URL正则等方式,来缩小一下范围。11)哪个爬虫的设计模式和构架比较好?设计模式纯属扯淡。说软件设计模式好的,都是软件开发完,然后总结出几个设计模式。设计模式对软件开发没有指导性作用。用设计模式来设计爬虫,只会使得爬虫的设计更加臃肿。至于构架,开源爬虫目前主要是细节的数据结构的设计,比如爬取线程池、任务队列,这些大家都能控制好。爬虫的业务太简单,谈不上什么构架。所以对于JAVA开源爬虫,我觉得,随便找一个用的顺手的就可以。如果业务复杂,拿哪个爬虫来,都是要经过复杂的二次开发,才可以满足需求。第三类:非JAVA单机爬虫在非JAVA语言编写的爬虫中,有很多优秀的爬虫。这里单独提取出来作为一类,并不是针对爬虫本身的质量进行讨论,而是针对larbin、scrapy这类爬虫,对开发成本的影响。先说python爬虫,python可以用30行代码,完成JAVA 50行代码干的任务。python写代码的确快,但是在调试代码的阶段,python代码的调试往往会耗费远远多于编码阶段省下的时间。使用python开发,要保证程序的正确性和稳定性,就需要写更多的测试模块。当然如果爬取规模不大、爬取业务不复杂,使用scrapy这种爬虫也是蛮不错的,可以轻松完成爬取任务。对于C++爬虫来说,学习成本会比较大。而且不能只计算一个人的学习成本,如果软件需要团队开发或者交接,那就是很多人的学习成本了。软件的调试也不是那么容易。还有一些ruby、php的爬虫,这里不多评价。的确有一些非常小型的数据采集任务,用ruby或者php很方便。但是选择这些语言的开源爬虫,一方面要调研一下相关的生态圈,还有就是,这些开源爬虫可能会出一些你搜不到的BUG(用的人少、资料也少)End.“感谢你耐心的看完,鞠躬ing。一直最用心,行业最强音。如果你觉得内容对你有帮助,希望你转载到朋友圈分享给更多的人。传递知识,传递快乐。回复对应数字,查看对应系列文章1数据可视化
5篇系列文章2推荐系统
5篇系列文章3机器学习
5篇系列文章4随机森林和支持向量机
5篇系列文章5成为数据科学家
5篇系列文章6大数据面试题
5篇系列文章7大数据工具
5篇系列文章8实践篇 大数据应用案例
5篇系列文章9新手上路,数据行业入门学习5篇系列文章36大数据是一个专注大数据创业、大数据技术与分析、大数据入门学习的商业新媒体。分享大数据在电商、移动互联网APP、医疗及金融银行等领域的落地应用。36大数据是百度大数据首席战略合作媒体。也是WeMedia自媒体联盟成员。网站:QQ千人群:投稿邮箱:36大数据微信dashuju36发干货/有价值的内容大数据女神dashujunvshen发布行业新闻、动向点击下方“阅读原文”查看更多↓↓↓
觉得不错,分享给更多人看到
36大数据 最新文章:
查看更多&&>>&&
关注大数据和互联网趋势,最大,最权威,最干货的大数据微信号(dashuju36).大数据第一科技媒体.不发软文,只做知识分享.
36大数据 微信二维码
分享这篇文章
2月1日 22:00<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&据悉,该女子身体携带艾滋病毒及梅毒等传染性疾病。
当地3200人不分国籍,全数裸体并将涂成不同色调的蓝。
声明:本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。
  要玩大数据,没有数据怎么玩?这里推荐一些33款开源爬虫软件给大家。
  爬虫,即网络爬虫,是一种自动获取网页内容的程序。是搜索引擎的重要组成部分,因此搜索引擎优化很大程度上就是针对爬虫而做出的优化。
  网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。聚焦爬虫的工作流程较为复杂,需要根据一定的网页分析算法过滤与主题无关的链接,保留有用的链接并将其放入等待抓取的URL队列。然后,它将根据一定的搜索策略从队列中选择下一步要抓取的网页URL,并重复上述过程,直到达到系统的某一条件时停止。另外,所有被爬虫抓取的网页将会被系统存贮,进行一定的分析、过滤,并建立索引,以便之后的查询和检索;对于聚焦爬虫来说,这一过程所得到的分析结果还可能对以后的抓取过程给出反馈和指导。
  世界上已经成型的爬虫软件多达上百种,本文对较为知名及常见的开源爬虫软件进行梳理,按开发语言进行汇总。虽然搜索引擎也有爬虫,但本次我汇总的只是爬虫软件,而非大型、复杂的搜索引擎,因为很多兄弟只是想爬取数据,而非运营一个搜索引擎。
  Java爬虫1. Arachnid
  Arachnid是一个基于Java的web spider框架.它包含一个简单的HTML剖析器能够分析包含HTML内容的输入流.通过实现Arachnid的子类就能够开发一个简单的Web spiders并能够在Web站上的每个页面被解析之后增加几行代码调用。 Arachnid的下载包中包含两个spider应用程序例子用于演示如何使用该框架。
  特点:微型爬虫框架,含有一个小型HTML解析器
  许可证:GPL
  2、crawlzilla
  crawlzilla 是一个帮你轻松建立搜索引擎的自由软件,有了它,你就不用依靠商业公司的搜索引擎,也不用再烦恼公司炔客咀柿纤饕奈侍狻
  由 nutch 专案为核心,并整合更多相关套件,并卡发设计安装与管理UI,让使用者更方便上手。
  crawlzilla 除了爬取基本的 html 外,还能分析网页上的文件,如( doc、pdf、ppt、ooo、rss )等多种文件格式,让你的搜索引擎不只是网页搜索引擎,而是网站的完整资料索引库。
  拥有中文分词能力,让你的搜索更精准。
  crawlzilla的特色与目标,最主要就是提供使用者一个方便好用易安b的搜索平台。
  授权协议: Apache License 2
  开发语言: Java Java SHELL
  操作系统: Linux
  项目主页: 下载地址 :
  特点:安装简易,拥有中文分词功能
  3、Ex-Crawler
  Ex-Crawler 是一个网页爬虫,采用 Java 开发,该项目分成两部分,一个是守护进程,另外一个是灵活可配置的 Web 爬虫。使用数据库存储网页信息。
  授权协议: GPLv3开发语言: Java操作系统: 跨平台
  特点:由守护进程执行,使用数据库存储网页信息
  4、Heritrix
  Heritrix 是一个由 java 开发的、开源的网络爬虫,用户可以使用它来从网上抓取想要的资源。其最出色之处在于它良好的可扩展性,方便用户实现自己的抓取逻辑。
  Heritrix采用的是模块化的设计,各个模块由一个控制器类(CrawlController类)来协调,控制器是整体的核心。
  代码托管:
  授权协议: Apache开发语言: Java操作系统: 跨平台
  特点:严格遵照robots文件的排除指示和META robots标签
  5、heyDr
  heyDr是一款基于java的轻量级开源多线程垂直检索爬虫框架,遵循GNU GPL V3协议。
  用户可以通过heyDr构建自己的垂直资源爬虫,用于搭建垂直搜索引擎前期的数据准备。
  授权协议: GPLv3开发语言: Java操作系统: 跨平台
  特点:轻量级开源多线程垂直检索爬虫框架
  6、ItSucks
  ItSucks是一个java web spider(web机器人,爬虫)开源项目。支持通过下载模板和正则表达式来定义下载规则。提供一个swing GUI操作界面。
  特点:提供swing GUI操作界面
  7、jcrawl
  jcrawl是一款小巧性能优良的的web爬虫,它可以从网页抓取各种类型的文件,基于用户定义的符号,比如email,qq.
  授权协议: Apache开发语言: Java操作系统: 跨平台
  特点:轻量、性能优良,可以从网页抓取各种类型的文件
  8、JSpider
  JSpider是一个用Java实现的WebSpider,JSpider的执行格式如下:
  jspider [URL] [ConfigName]
  URL一定要加上协议名称,如:http://,否则会报错。如果省掉ConfigName,则采用默认配置。
  JSpider 的行为是由配置文件具体配置的,比如采用什么插件,结果存储方式等等都在conf\[ConfigName]\目录下设置。JSpider默认的配置种类 很少,用途也不大。但是JSpider非常容易扩展,可以利用它开发强大的网页抓取与数据分析工具。要做到这些,需要对JSpider的原理有深入的了 解,然后根据自己的需求开发插件,撰写配置文件。
  授权协议: LGPL开发语言: Java操作系统: 跨平台
  特点:功能强大,容易扩展
  9、Leopdo
  用JAVA编写的web 搜索和爬虫,包括全文和分类垂直搜索,以及分词系统
  授权协议: Apache开发语言: Java操作系统: 跨平台
  特点:包括全文和分类垂直搜索,以及分词系统
  10、MetaSeeker
  是一套完整的网页内容抓取、格式化、数据集成、存储管理和搜索解决方案。
  网络爬虫有多种实现方法,如果按照部署在哪里分,可以分成:
  服务器侧:
  一般是一个多线程程序,同时下载多个目标HTML,可以用PHP, Java, Python(当前很流行)等做,可以速度做得很快,一般综合搜索引擎的爬虫这样做。但是,如果对方讨厌爬虫,很可能封掉你的IP,服务器IP又不容易 改,另外耗用的带宽也是挺贵的。建议看一下Beautiful soap。
  客户端:
  一般实现定题爬虫,或者是聚焦爬虫,做综合搜索引擎不容易成功,而垂直搜诉或者比价服务或者推荐引擎,相对容易很多,这类爬虫不是什么页面都 取的,而是只取你关系的页面,而且只取页面上关心的内容,例如提取黄页信息,商品价格信息,还有提取竞争对手广告信息的,搜一下Spyfu,很有趣。这类 爬虫可以部署很多,而且可以很有侵略性,对方很难封锁。
  MetaSeeker中的网络爬虫就属于后者。
  MetaSeeker工具包利用Mozilla平台的能力,只要是Firefox看到的东西,它都能提取。
  MetaSeeker工具包是免费使用的,下载地址:
  特点:网页抓取、信息提取、数据抽取工具包,操作简单
  11、Playfish
  playfish是一个采用java技术,综合应用多个开源java组件实现的网页抓取工具,通过XML配置文件实现高度可定制性与可扩展性的网页抓取工具
  应用开源jar包包括httpclient(内容读取),dom4j(配置文件解析),jericho(html解析),已经在 war包的lib下。
  这个项目目前还很不成熟,但是功能基本都完成了。要求使用者熟悉XML,熟悉正则表达式。目前通过这个工具可以抓取各类论坛,贴吧,以及各类CMS系统。像Discuz!,phpbb,论坛跟博客的文章,通过本工具都可以轻松抓取。抓取定义完全采用XML,适合Java开发人员使用。
  使用方法:
  下载右边的.war包导入到eclipse中,使用WebContent/sql下的wcc.sql文件建立一个范例数据库,修改src包下wcc.core的dbConfig.txt,将用户名与密码设置成你自己的mysql用户名密码。然后运行SystemCore,运行时候会在控制台,无参数会执行默认的example.xml的配置文件,带参数时候名称为配置文件名。
  系统自带了3个例子,分别为baidu.xml抓取百度知道,example.xml抓取我的javaeye的博客,bbs.xml抓取一个采用 discuz论坛的内容。
  授权协议: MIT开发语言: Java操作系统: 跨平台
  特点:通过XML配置文件实现高度可定制性与可扩展性
  12、Spiderman
  Spiderman 是一个基于微内核+插件式架构的网络蜘蛛,它的目标是通过简单的方法就能将复杂的目标网页信息抓取并解析为自己所需要的业务数据。
  怎么使用?
  首先,确定好你的目标网站以及目标网页(即某一类你想要获取数据的网页,例如网易新闻的新闻页面)
  然后,打开目标页面,分析页面的HTML结构,得到你想要数据的XPath,具体XPath怎么获取请看下文。
  最后,在一个xml配置文件里填写好参数,运行Spiderman吧!
  授权协议: Apache开发语言: Java操作系统: 跨平台
  特点:灵活、扩展性强,微内核+插件式架构,通过简单的配置就可以完成数据抓取,无需编写一句代码
  13、webmagic
  webmagic的是一个无须配置、便于二次开发的爬虫框架,它提供简单灵活的API,只需少量代码即可实现一个爬虫。
  webmagic采用完全模块化的设计,功能覆盖整个爬虫的生命周期(链接提取、页面下载、内容抽取、持久化),支持多线程抓取,分布式抓取,并支持自动重试、自定义UA/cookie等功能。
  webmagic包含强大的页面抽取功能,开发者可以便捷的使用css selector、xpath和正则表达式进行链接和内容的提取,支持多个选择器链式调用。
  webmagic的使用文档:
  查看源代码:
  授权协议: Apache开发语言: Java操作系统: 跨平台
  特点:功能覆盖整个爬虫生命周期,使用Xpath和正则表达式进行链接和内容的提取。
  备注:这是一款国产开源软件,由 黄亿华贡献
  14、Web-Harvest
  Web-Harvest是一个Java开源Web数据抽取工具。它能够收集指定的Web页面并从这些页面中提取有用的数据。Web-Harvest主要是运用了像XSLT,XQuery,正则表达式等这些技术来实现对text/xml的操作。
  其实现原理是,根据预先定义的配置文件用httpclient获取页面的全部内容(关于httpclient的内容,本博有些文章已介绍),然后运用XPath、XQuery、正则表达式等这些技术来实现对text/xml的内容筛选操作,选取精确的数据。前两年比较火的垂直搜索(比如:酷讯等)也是采用类似的原理实现的。Web-Harvest应用,关键就是理解和定义配置文件,其他的就是考虑怎么处理数据的Java代码。当然在爬虫开始前,也可以把Java变量填充到配置文件中,实现动态的配置。
  授权协议: BSD开发语言: Java
  特点:运用XSLT、XQuery、正则表达式等技术来实现对Text或XML的操作,具有可视化的界面
  15、WebSPHINX
  WebSPHINX是一个Java类包和Web爬虫的交互式开发环境。Web爬虫(也叫作机器人或蜘蛛)是可以自动浏览与处理Web页面的程序。WebSPHINX由两部分组成:爬虫工作平台和WebSPHINX类包。
  授权协议:Apache
  开发语言:Java
  特点:由两部分组成:爬虫工作平台和WebSPHINX类包
  16、YaCy
  YaCy基于p2p的分布式Web搜索引擎.同时也是一个Http缓存代理服务器.这个项目是构建基于p2p Web索引网络的一个新方法.它可以搜索你自己的或全局的索引,也可以Crawl自己的网页或启动分布式Crawling等.
  授权协议: GPL开发语言: Java Perl操作系统: 跨平台
  特点:基于P2P的分布式Web搜索引擎
  Python爬虫17、QuickRecon
  QuickRecon是一个简单的信息收集工具,它可以帮助你查找子域名名称、perform zone transfe、收集电子邮件地址和使用microformats寻找人际关系等。QuickRecon使用python编写,支持linux和 windows操作系统。
  授权协议: GPLv3开发语言: Python操作系统: Windows Linux
  特点:具有查找子域名名称、收集电子邮件地址并寻找人际关系等功能
  18、PyRailgun
  这是一个非常简单易用的抓取工具。支持抓取java渲染的页面的简单实用高效的python网页爬虫抓取模块
  授权协议: MIT开发语言: Python操作系统: 跨平台 Windows Linux OS X
  特点:简洁、轻量、高效的网页抓取框架
  备注:此软件也是由国人开放
  github下载:
  19、Scrapy
  Scrapy 是一套基于基于Twisted的异步处理框架,纯python实现的爬虫框架,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非常之方便~
  授权协议: BSD开发语言: Python操作系统: 跨平台
  github源代码:
  特点:基于Twisted的异步处理框架,文档齐全
  C++爬虫20、hispider
  HiSpider is a fast and high performance spider with high speed
  严格说只能是一个spider系统的框架, 没有细化需求, 目前只是能提取URL, URL排重, 异步DNS解析, 队列化任务, 支持N机分布式下载, 支持网站定向下载(需要配置hispiderd.ini whitelist).
  特征和用法:
  基于unix/linux系统的开发异步DNS解析URL排重支持HTTP 压缩编码传输 gzip/deflate字符集判断自动转换成UTF-8编码文档压缩存储支持多下载节点分布式下载支持网站定向下载(需要配置 hispiderd.ini whitelist )可通过 http://127.0.0.1:3721/ 查看下载情况统计,下载任务控制(可停止和恢复任务)依赖基本通信库libevbase 和 libsbase (安装的时候需要先安装这个两个库)、
  工作流程:
  从中心节点取URL(包括URL对应的任务号, IP和port,也可能需要自己解析)连接服务器发送请求等待数据头判断是否需要的数据(目前主要取text类型的数据)等待完成数据(有length头的直接等待说明长度的数据否则等待比较大的数字然后设置超时)数据完成或者超时, zlib压缩数据返回给中心服务器,数据可能包括自己解析DNS信息, 压缩后数据长度+压缩后数据, 如果出错就直接返回任务号以及相关信息中心服务器收到带有任务号的数据, 查看是否包括数据, 如果没有数据直接置任务号对应的状态为错误, 如果有数据提取数据种link 然后存储数据到文档文件.完成后返回一个新的任务.
  授权协议: BSD
  开发语言: C/C++
  操作系统: Linux
  特点:支持多机分布式下载, 支持网站定向下载
  21、larbin
  larbin是一种开源的网络爬虫/网络蜘蛛,由法国的年轻人 S&bastien Ailleret独立开发。larbin目的是能够跟踪页面的url进行扩展的抓取,最后为搜索引擎提供广泛的数据来源。Larbin只是一个爬虫,也就 是说larbin只抓取网页,至于如何parse的事情则由用户自己完成。另外,如何存储到数据库以及建立索引的事情 larbin也不提供。一个简单的larbin的爬虫可以每天获取500万的网页。
  利用larbin,我们可以轻易的获取/确定单个网站的所有链接,甚至可以镜像一个网站;也可以用它建立url 列表群,例如针对所有的网页进行 url retrive后,进行xml的联结的获取。或者是 mp3,或者定制larbin,可以作为搜索引擎的信息的来源。
  授权协议: GPL开发语言: C/C++操作系统: Linux
  特点:高性能的爬虫软件,只负责抓取不负责解析
  22、Methabot
  Methabot 是一个经过速度优化的高可配置的 WEB、FTP、本地文件系统的爬虫软件。
  授权协议: 未知开发语言: C/C++操作系统: Windows Linux
  特点:过速度优化、可抓取WEB、FTP及本地文件系统
  源代码:
  C#爬虫23、NWebCrawler
  NWebCrawler是一款开源,C#开发网络爬虫程序。
  特性:
  可配置:线程数,等待时间,连接超时,允许MIME类型和优先级,下载文件夹。统计信息:URL数量,总下载文件,总下载字节数,CPU利用率和可用内存。Preferential crawler:用户可以设置优先级的MIME类型。Robust: 10+ URL normalization rules, crawler trap avoiding rules.
  授权协议: GPLv2
  开发语言: C#
  操作系统: Windows
  项目主页:
  特点:统计信息、执行过程可视化
  24、Sinawler
  国内第一个针对微博数据的爬虫程序!原名“新浪微博爬虫”。
  登录后,可以指定用户为起点,以该用户的关注人、粉丝为线索,延人脉关系搜集用户基本信息、微博数据、评论数据。
  该应用获取的数据可作为科研、与新浪微博相关的研发等的数据支持,但请勿用于商业用途。该应用基于.NET2.0框架,需SQL SERVER作为后台数据库,并提供了针对SQL Server的数据库脚本文件。
  另外,由于新浪微博API的限制,爬取的数据可能不够完整(如获取粉丝数量的限制、获取微博数量的限制等)
  本程序版权归作者所有。你可以免费: 拷贝、分发、呈现和表演当前作品,制作派生作品。 你不可将当前作品用于商业目的。
  5.x版本已经发布! 该版本共有6个后台工作线程:爬取用户基本信息的机器人、爬取用户关系的机器人、爬取用户标签的机器人、爬取微博内容的机器人、爬取微博评论的机器人,以及调节请求频率的机器人。更高的性能!最大限度挖掘爬虫潜力! 以现在测试的结果看,已经能够满足自用。
  本程序的特点:
  6个后台工作线程,最大限度挖掘爬虫性能潜力!界面上提供参数设置,灵活方便抛弃app.config配置文件,自己实现配置信息的加密存储,保护数据库帐号信息自动调整请求频率,防止超限,也避免过慢,降低效率任意对爬虫控制,可随时暂停、继续、停止爬虫良好的用户体验
  授权协议: GPLv3
  开发语言: C# .NET
  操作系统: Windows
  25、spidernet
  spidernet是一个以递归树为模型的多线程web爬虫程序, 支持text/html资源的获取. 可以设定爬行深度, 最大下载字节数限制, 支持gzip解码, 支持以gbk(gb2312)和utf8编码的资源; 存储于sqlite数据文件.
  源码中TODO:标记描述了未完成功能, 希望提交你的代码.
  授权协议: MIT开发语言: C#操作系统: Windows
  github源代码:/nsnail/spidernet
  特点:以递归树为模型的多线程web爬虫程序,支持以GBK (gb2312)和utf8编码的资源,使用sqlite存储数据
  26、Web Crawler
  mart and Simple Web Crawler是一个Web爬虫框架。集成Lucene支持。该爬虫可以从单个链接或一个链接数组开始,提供两种遍历模式:最大迭代和最大深度。可以设置 过滤器限制爬回来的链接,默认提供三个过滤器ServerFilter、BeginningPathFilter和 RegularExpressionFilter,这三个过滤器可用AND、OR和NOT联合。在解析过程或页面加载前后都可以加监听器。介绍内容来自Open-Open
  开发语言: Java操作系统: 跨平台授权协议: LGPL
  特点:多线程,支持抓取PDF/DOC/EXCEL等文档来源
  27、网络矿工
  网站数据采集软件 网络矿工采集器(原soukey采摘)
  Soukey采摘网站数据采集软件是一款基于.Net平台的开源软件,也是网站数据采集软件类型中唯一一款开源软件。尽管Soukey采摘开源,但并不会影响软件功能的提供,甚至要比一些商用软件的功能还要丰富。
  授权协议: BSD开发语言: C# .NET操作系统: Windows
  特点:功能丰富,毫不逊色于商业软件
  PHP爬虫28、OpenWebSpider
  OpenWebSpider是一个开源多线程Web Spider(robot:机器人,crawler:爬虫)和包含许多有趣功能的搜索引擎。
  授权协议: 未知开发语言: PHP操作系统: 跨平台
  特点:开源多线程网络爬虫,有许多有趣的功能
  29、PhpDig
  PhpDig是一个采用PHP开发的Web爬虫和搜索引擎。通过对动态和静态页面进行索引建立一个词汇表。当搜索查询时,它将按一定的排序规则显示包含关 键字的搜索结果页面。PhpDig包含一个模板系统并能够索引PDF,Word,Excel,和PowerPoint文档。PHPdig适用于专业化更 强、层次更深的个性化搜索引擎,利用它打造针对某一领域的垂直搜索引擎是最好的选择。
  演示:
  授权协议: GPL开发语言: PHP操作系统: 跨平台
  特点:具有采集网页内容、提交表单功能
  30、ThinkUp
  ThinkUp 是一个可以采集推特,facebook等社交网络数据的社会媒体视角引擎。通过采集个人的社交网络账号中的数据,对其存档以及处理的交互分析工具,并将数据图形化以便更直观的查看。
  授权协议: GPL开发语言: PHP操作系统: 跨平台
  github源码:
  特点:采集推特、脸谱等社交网络数据的社会媒体视角引擎,可进行交互分析并将结果以可视化形式展现
  31、微购
  微购社会化购物系统是一款基于ThinkPHP框架开发的开源的购物分享系统,同时它也是一套针对站长、开源的的淘宝客网站程序,它整合了淘宝、天猫、淘宝客等300多家商品数据采集接口,为广大的淘宝客站长提供傻瓜式淘客建站服务,会HTML就会做程序模板,免费开放下载,是广大淘客站长的首选。
  演示网址:
  授权协议: GPL
  开发语言: PHP
  操作系统: 跨平台
  ErLang爬虫32、Ebot
  Ebot 是一个用 ErLang 语言开发的可伸缩的分布式网页爬虫,URLs 被保存在数据库中可通过 RESTful 的 HTTP 请求来查询。
  授权协议: GPLv3开发语言: ErLang操作系统: 跨平台
  github源代码:/matteoredaelli/ebot
  项目主页: http://www.redaelli.org/matteo/blog/projects/ebot
  特点:可伸缩的分布式网页爬虫
  Ruby爬虫33、Spidr
  Spidr 是一个Ruby 的网页爬虫库,可以将整个网站、多个网站、某个链接完全抓取到本地。
  开发语言: Ruby授权协议:MIT
  特点:可将一个或多个网站、某个链接完全抓取到本地
  本文由36大数据收集整理
  原文地址:/archives/34383
欢迎举报抄袭、转载、暴力色情及含有欺诈和虚假信息的不良文章。
请先登录再操作
请先登录再操作
微信扫一扫分享至朋友圈
搜狐公众平台官方账号
生活时尚&搭配博主 /生活时尚自媒体 /时尚类书籍作者
搜狐网教育频道官方账号
全球最大华文占星网站-专业研究星座命理及测算服务机构
是唯一参与中国项目管理“国家标准(国际)”起草的培训机构!...
主演:黄晓明/陈乔恩/乔任梁/谢君豪/吕佳容/戚迹
主演:陈晓/陈妍希/张馨予/杨明娜/毛晓彤/孙耀琦
主演:陈键锋/李依晓/张迪/郑亦桐/张明明/何彦霓
主演:尚格?云顿/乔?弗拉尼甘/Bianca Bree
主演:艾斯?库珀/ 查宁?塔图姆/ 乔纳?希尔
baby14岁写真曝光
李冰冰向成龙撒娇争宠
李湘遭闺蜜曝光旧爱
美女模特教老板走秀
曝搬砖男神奇葩择偶观
柳岩被迫成赚钱工具
大屁小P虐心恋
匆匆那年大结局
乔杉遭粉丝骚扰
男闺蜜的尴尬初夜
客服热线:86-10-
客服邮箱:}

我要回帖

更多关于 c 爬虫框架开源 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信