发布信息

用了什么开源的系统吗 知乎问答系统是用什么言语开发的 (什么开源软件)

     2024-07-29 05:14:02     678

本文目录导航:

知乎问答系统是用什么言语开发的。用了什么开源的系统吗?

操作系统Linux,Web主机Nginx,开发言语Python,Tornado框架,数据库存储MySQL,缓存Memcached,ORM用SQLAlchemy,极速搜查Redis,Javascript框架Closure Library

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

开发网络爬虫应该选用Nutch、Crawler4j、WebMagic、scrapy、WebCollector还是其余的?这里依照我的阅历随意扯淡一下:下面说的爬虫,基本可以分3类:1.散布式爬虫单机爬虫: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(用的人少、资料也少)

simulink可以做什么 知乎

simulink性能十分弱小,重要是用于仿真,库外面有各种各样的工具箱,每个工具箱都对应了一个运行畛域。

有含糊控制、神经网络、曲线拟合、OPC通信、鲁邦控制、有限形态机、信号处置、图像处置、物理建模等,还可以允许一些智能开源配件。

相关内容 查看全部