各种语言写网络爬虫有什么优点缺点?

大哥大姐们有没有人讲详细点的,我想说下,各种语言写网络爬虫有什么优点缺点?
最新回答
我污但不色

2025-03-30 03:35:34

如果是一个站点,单一目的,用习惯的语言写吧,学别的语言用的时间都够重构两遍的了。如果是有100左右的站点,做个框架,把你的爬虫管理起来,比起怎么写更重要。ok,以上两个都是 “手动” 写模板的(当然,我们会有一些小插件等辅助工具)。手动写模板的好处是:当站点不多的时候——快,灵活。在这样的场景和目的下,选择你习惯的语言,有最多页面解析和 HTTP 请求支持的库的语言最好。比如 python,java。注意,这么选择的唯一原因是启动成本高于编写成本当你面临的是1000个站点这个量级的时候,可能你需要编写一个模板生成器,当你面临的是 1w 个站点以上,但是是同一类型的站点,可能你需要自动模板挖掘。在这个阶段,算法更重要,所以代码编写的便利程度决定你的选择。当然,当算法稳定之后,就变成下面那个问题了。当你面临的是每天几十亿的网页,来一次全量计算算一周,每个页面需要提取标题,主图,发布时间,网页分块,页面价值。不可能有人给他们写“脚本”,配模板。大量的建树,分词,机器学习,打分,follow 链接质量预测,筛选。占用大量的计算。这个阶段,计算速度就非常重要了,除非你能说服老大,给你加几千台机器。相对于这样的需求,重新编写所有基础组件都可以。语言的选择就会选择执行速度快的了。需要说明的一点是,灵活度,或者说抽取准确性,从上到下是依次递减的。PM也不会要求你能对几百亿的网站准确抽取每个字段对吧。

最后说一下抓取的问题。调度抓取对于每个爬虫都是必要的,但却没什么好说的,不同量级自然有不同的做法,但是这样的系统一般目的明确,少包依赖,不需要你不断修改。并且在架构中,往往可以是独立组件,和下游是不同语言都行,爱用什么写用什么写。。对于机房带宽来说,下行基本是没人用的,只要你和对方网站愿意,抓取速度不是瓶颈。反而,计算对方压力,筛选重复,高质链接更重要。而这又反过来带来了计算的压力。

不要忘記

2025-03-30 08:51:19

我用 PHP 和 Python 都写过爬虫和正文提取程序。最开始使用 PHP 所以先说说 PHP 的优点:1.语言比较简单,PHP 是非常随意的一种语言。写起来容易让你把精力放在你要做的事情上,而不是各种语法规则等等。2.各种功能模块齐全,这里分两部分:1.网页下载:curl 等扩展库;2.文档解析:dom、xpath、tidy、各种转码工具,可能跟题主的问题不太一样,我的爬虫需要提取正文,所以需要很复杂的文本处理,所以各种方便的文本处理工具是我的大爱。;总之容易上手。缺点:1.并发处理能力较弱:由于当时 PHP 没有线程、进程功能,要想实现并发需要借用多路服用模型,PHP 使用的是 select 模型。实现其来比较麻烦,可能是因为水平问题我的程序经常出现一些错误,导致漏抓。

再说说 Python:优点:1.各种爬虫框架,方便高效的下载网页;2.多线程、进程模型成熟稳定,爬虫是一个典型的多任务处理场景,请求页面时会有较长的延迟,总体来说更多的是等待。多线程或进程会更优化程序效率,提升整个系统下载和分析能力。3.GAE 的支持,当初写爬虫的时候刚刚有 GAE,而且只支持 Python ,利用 GAE 创建的爬虫几乎免费,最多的时候我有近千个应用实例在工作。

缺点:1.对不规范 HTML 适应能力差:举个例子,如果一个页面里面同时有 GB18030 字符集的中文和 UTF-8 字符集的中文,Python 处理起来就没有 PHP 那么简单,你自己需要做很多的判断工作。当然这是提取正文时的麻烦。Java 和 C++ 当时也考察过,相对脚本语言比较麻烦,所以放弃。

总之,如果开发一个小规模的爬虫脚本语言是个各方面比较有优势的语言。如果要开发一个复杂的爬虫系统可能 Java 是个增加选项, C++ 我感觉写个模块之类的更加适合。对于一个爬虫系统来说,下载和内文解析只是基本的两个功能。真正好的系统还包括完善的任务调度、监控、存储、页面数据保存和更新逻辑、排重等等。爬虫是一个耗费带宽的应用,好的设计会节约大量的带宽和服务器资源,并且好坏差距很大。

丶小嘴灬乱亲

2025-03-30 06:48:37

我来讲一个特别的。当年在MSRA的时候写爬虫,就不需要访问网络。我先以项目的原因跟Bing要资源,当然同时有它的集群和他的数据。爬虫就是用Scope写的,所谓的Scope长得很像SQL,然后在所有有表达式的地方都换成了C#代码。所以基本都写成map-reduce那样子的,偶尔会使用group by啊order by啊join这些高级功能,狂甩正则表达式,特别方便。需要的中间数据结构全部做成临时表/文件表,加上index,压根不需要考虑内存和硬盘大小的问题。几个超大的网站十几个小时就趴下来了,还不用担心被封。这体验比我以前用什么鸡巴语言用http爬都要爽。爬那么多各种网站(主要是用来实现微软的那个knowledge graph),写的爬虫用的时间,跟写爬虫爬一很太几张破图花的时间几乎一样长。

在做这个过做的过程中,体验了一把整个公司的人都在为了“我要多用一点bing的资源”互相肛的过程,让我得到了极大的成长。当然了,那种程序我再也不想写了,太体力活了。要不是看在当年已经签好了Offer要从MSRA走了没事干,这种事都是让实习生来做的。