问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

哪个开源多线程爬虫比较好学 知乎

发布网友 发布时间:2022-04-29 02:13

我来回答

2个回答

热心网友 时间:2022-04-09 15:25

  开发网络爬虫应该选择Nutch、Crawler4j、WebMagic、scrapy、WebCollector还是其他的?这里按照我的经验随便扯淡一下:上面说的爬虫,基本可以分3类:1.分布式爬虫:Nutch
  2.JAVA单机爬虫:Crawler4j、WebMagic、WebCollector
  3. 非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(用的人少、资料也少)

热心网友 时间:2022-04-09 16:43

现在爬虫有很多,如果你刚入门的话,可以学习下Python,这个会比较容易点个人觉得。具体的话,还是需要看你自己感兴趣啥的。
哪个开源多线程爬虫比较好学 知乎

这里按照我的经验随便扯淡一下:上面说的爬虫,基本可以分3类:1.分布式爬虫:Nutch 2.JAVA单机爬虫:Crawler4j、WebMagic、WebCollector 3. 非JAVA单机爬虫:scrapy 第一类:分布式爬虫 爬虫使用分布式,主要是解决两个问题: 1)海量URL管理 2)网速 现在比较流行的分布式爬虫,是Apache的Nutch。但是对于大多数用户来说,Nutch是...

python 爬虫框架哪个好 知乎

4、Portia:是一个开源可视化爬虫工具,可以让您在不需要任何编程知识的情况下抓取网站,简单地注解您感兴趣的页面,创建一个蜘蛛来从类似的页面抓取数据。5、Newspaper:可以用来提取新闻、文章和内容分析,使用多线程,支持10多种编程语言。6、Beautiful Soup:是一个可以从HTML或者xml文件中提取数据的Pytho...

如何用爬虫爬取知乎专栏信息

推荐个很好用的软件,我也是一直在用的,就是前嗅的ForeSpider软件,我是一直用过很多的采集软件,最后选择的前嗅的软件,ForeSpider这款软件是可视化的操作。简单配置几步就可以采集。如果网站比较复杂,这个软件自带爬虫脚本语言,通过写几行脚本,就可以采集所有的公开数据。软件还自带免费的数据库,数据采...

如何用JAVA写一个知乎爬虫

使用Java写爬虫,常见的网页解析和提取方法有两种:利用开源Jar包Jsoup和正则。一般来说,Jsoup就可以解决问题,极少出现Jsoup不能解析和提取的情况。Jsoup强大功能,使得解析和提取异常简单。知乎爬虫采用的就是Jsoup。(6)正则匹配与提取(爬虫主要技术点5)虽然知乎爬虫采用Jsoup来进行网页解析,但是仍然封装...

如何对知乎内容进行爬虫?

1、如果会编程,github上有不少热心工程师开源的代码。2、如果不想编程,可以找某宝上面的-楚江数据 进行采集或者定制爬虫。

如何对知乎内容进行爬虫

1、如果会编程,github上有不少热心工程师开源的代码。2、如果不想编程,可以找某宝上面的-楚江数据 进行采集或者定制爬虫。

Python爬虫:如何在一个月内学会爬取大规模数

分布式Python爬虫,实现大规模并发采集 爬取基本数据已经不是问题了,你的瓶颈会集中到爬取海量数据的效率。这个时候,相信你会很自然地接触到一个很厉害的名字:分布式爬虫。分布式这个东西,听起来很恐怖,但其实就是利用多线程的原理让多个爬虫同时工作,需要你掌握 Scrapy + MongoDB + Redis 这三种工具...

python爬虫怎么赚钱 知乎

第三种。在职大学生 如果你是在职大学生,数学或者计算机相关专业的人员,编程能力还可以的话,可以稍微看一下编程知识,比如爬虫库、HTML解析、内容存储等,复杂还需要了解URL排重、模拟登录、验证码识别、多线程等,这部分人员工程经验比较少,想要通过爬虫赚钱的话,可以找一些少量数据抓取的项目,一点点...

怎样用Python设计一个爬虫模拟登陆知乎

所以一个爬虫模拟登陆就是要要做到模拟一个浏览器客户端的行为,首先将你的基本登录信息发送给指定的url,服务器验证成功后会返回一个cookie,我们就利用这个cookie进行后续的爬取工作就行了。我这里抓包用的就是chrome的开发者工具,不过你也可以使用Fiddler、Firebug等都可以,只不过作为一名前端er对chrome...

怎样用Python设计一个爬虫模拟登陆知乎

知乎现在登录貌似每次都会有密码了,修改如下:import requests from xtls.util import BeautifulSoup INDEX_URL = 'xxx LOGIN_URL = 'xxx'CAPTCHA_URL = 'xxx'def gen_time_stamp():return str(int(time.time())) + '%03d' % random.randint(0, 999)def login(username, password, oncaptcha...

知乎爬虫爬不了了 Python爬虫爬取知乎数据 好学近知乎力行近乎仁 知乎 爬虫 python爬虫知乎 爬虫软件知乎 爬虫的最高境界知乎 Python爬虫代码知乎 python爬虫书籍推荐 知乎
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
想去福州发展一下,没朋友在。谁能说一下福州市怎么样?工作好找不?_百度... 祝贺姐姐生日快乐的唯美句子 微信号被盗了怎么注销掉? 微信被盗后怎么注销账号? 阳历阴历生日怎么分别(阴历阳历怎么分生日) 糊墙用的白灰膏可以洒在猪圈里消毒吗? 邹城十大景点介绍视频(邹城十八盘和十八趟是一个地方吗) 老寿眉怎么泡,老寿眉可以泡几泡 白茶秋寿眉怎么冲泡更好喝? 你对寿眉有何印象?该如何泡饮? MYSQL数据库,如何用一条实现效率高的多结果查询。 就是要一条综合语句... php在执行一个耗时的mysql时无法进行其他mysql操作? 货车刹车绳扣的系法有哪些? MySQL中使用UNION进行两表合并,去重导致效率低下,请问如何优化 货车刹车绳扣的系法 如何实现MySQL Replication 优化 星贝保险和国任保险 全身吸脂需要多少钱!会不会反弹 全身抽脂到底好不好 重庆做抽脂会反弹吗?? 吸脂手术会反弹吗? 吸脂减肥会不会出现反弹? 吸脂后会反弹吗,能维持多久 全身吸脂疼吗?会反弹吗? 汽油是汽车刚需品,也是消耗品,有哪些加油省钱的方法呢? 生活小妙招,如何加油最省钱 走什么办法可以让加油便宜? 有什么可以节省汽油的方法和秘诀呢? oppo reno4 5g手机尺寸 跪求作文一篇(写给老师的一封信)500字,说老师好拍马屁,说不好,,,, 气刹车怎么操作? 刹车把用手指扣的地方那个叫什么名字 刹车怎么调 黄沙价格将下跌,怎样做空黄沙业的股票 广东建材业的发展潜力在哪里?广东省哪些建材产业的规模与产量位居全国前列?广东省建材上市公司有哪几家 水泥黄沙可以做防水保护层吗 芭贝拉和kiko哪个粉饼好用 黄沙矿什么时间改成新安矿 美卡佛和KIKO的粉饼哪个好用啊? 有没有风险小收益大的投资方式啊 kiko和蜜思婷粉饼哪个好用? kiko三色腮红好用吗 重庆轻轨1号线,6号线哪些赞点有公共卫生间? 平安银行股份有限公司广州黄沙支行怎么样? kiko干湿两用粉饼和干粉饼那个好用 广州银行股份有限公司黄沙大道支行怎么样? Kiko的眼影好用吗 广东联炬军民融合产业园股份有限公司怎么样? kiko和kate眼影哪个好用 中国电信股份有限公司勉县黄沙营业部怎么样?