首页 > 后端开发 > 正文

php爬虫框架推荐 Python,Node.js 哪个比较适合写爬虫

2023-09-08 07:23:42 | 我爱编程网

小编今天整理了一些php爬虫框架推荐 Python,Node.js 哪个比较适合写爬虫相关内容,希望能够帮到大家。

php爬虫框架推荐 Python,Node.js 哪个比较适合写爬虫

Python,Node.js 哪个比较适合写爬虫

先说优势:网上抓取和解析html的框架一抓一大把,各种工具直接拿来用就行了,比较省心。缺点:首先速度/效率很成问题,有一次下载电影海报的时候,由于是crontab定期执行,也没做优化,开的php进程太多,直接把内存撑爆了。然后语法方面也很拖沓,各种关键字 符号 太多,不够简洁,给人一种没有认真设计过的感觉,写起来很麻烦。

Node.js

Node.js。优点是效率、效率还是效率,由于网络是异步的,所以基本如同几百个进程并发一样强大,内存和CPU占用非常小,如果没有对抓取来的数据进行复杂的运算加工,那么系统的瓶颈基本就在带宽和写入MySQL等数据库的I/O速度。当然,优点的反面也是缺点,异步网络代表你需要callback,这时候如果业务需求是线性了,比如必须等待上一个页面抓取完成后,拿到数据,才能进行下一个页面的抓取,甚至多层的依赖关系,那就会出现可怕的多层callback!基本这时候,代码结构和逻辑就会一团乱麻。当然可以用Step等流程控制工具解决这些问题。

Python

最后说Python。如果你对效率没有极端的要求,那么推荐用Python!首先,Python的语法很简洁,同样的语句,可以少敲很多次键盘。然后,Python非常适合做数据的处理,比如函数参数的打包解包,列表解析,矩阵处理,非常方便。

Python更加实用

1、在日常做爬虫的时候,我更加倾向于Python,使用Python做爬虫有以下几个优点。

2、语言简洁,使用起来得心应手

3、使用方便,不需要笨重的IDE,Python只需要一个sublime text

4、强大的http库以及html解释器:requests、lxml、beautifulsoup

5、手到擒来的爬虫框架:Scrapy
6、 十分擅长做文本处理字符串处理

php爬虫框架推荐 Python,Node.js 哪个比较适合写爬虫

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

开发网络爬虫应该选择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)很多人说Nutch3有gora,可以持久化数据到avro文件、hbase、mysql等。很多人其实理解错了,这里说的持久化数据,是指将URL信息(URL管理所需要的数据)存放到avro、hbase、mysql。并不是你要抽取的结构化数据。其实对大多数人来说,URL信息存在哪里无所谓。
6)Nutch3的版本目前并不适合开发。官方现在稳定的Nutch版本是nutch3.2.1,但是这个版本绑定了gora-0.3。如果想用hbase配合nutch(大多数人用nutch3就是为了用hbase),只能使用0.90版本左右的hbase,相应的就要将hadoop版本降到hadoop 0.2左右。而且nutch3的官方教程比较有误导作用,Nutch3的教程有两个,分别是Nutch1.x和Nutch3.x,这个Nutch3.x官网上写的是可以支持到hbase 0.94。但是实际上,这个Nutch3.x的意思是Nutch3.3之前、Nutch3.2.1之后的一个版本,这个版本在官方的SVN中不断更新。而且非常不稳定(一直在修改)。
所以,如果你不是要做搜索引擎,尽量不要选择Nutch作为爬虫。有些团队就喜欢跟风,非要选择Nutch来开发精抽取的爬虫,其实是冲着Nutch的名气(Nutch作者是Doug Cutting),当然最后的结果往往是项目延期完成。
如果你是要做搜索引擎,Nutch1.x是一个非常好的选择。Nutch1.x和solr或者es配合,就可以构成一套非常强大的搜索引擎了。如果非要用Nutch3的话,建议等到Nutch3.3发布再看。目前的Nutch3是一个非常不稳定的版本。
第二类: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.

php爬虫框架推荐 Python,Node.js 哪个比较适合写爬虫

实用的15款开源PHP类库

PHP库给开发者提供了一个标准接口 它帮助开发者在PHP里充分利用面向对象编程 这些库为特定类型的内置功能提供了一个标准的API 允许类可以与PHP引擎进行无缝的交互 此外 开发者使用这些类库还可以简化工作流程 提供工作效率

下面就一起来看看这些非常实用且免费的类库吧 希望它们能助你一臂之力

Requests

Requests是一个用PHP编写的HTTP库 遵循ISC开源协议 托管在GitHub上 Requests取代了Python HTTP/ 以外的一切工作———让你与Web服务可以无缝的结合

Requests提供了一致的API 并且使用cURL或fsockopen(具体取决于可用性) 它还简化了发送请求 接受HEAD GET POST PUT DELETE或PATCH并且添加标头 表单数据和多个部分组成的文件 其次 该库还适用于国际域名 身份验证 自动压缩gzip压缩响应等 综上所述可以看出 Requests是一个非常好用且可以友好托管HTTP请求的标签

Munee

Munee是一个集图片尺寸调整 CSS JS合并/压缩 缓存等功能于一身的PHP库 可以在服务器端和客户端缓存资源 它集成了PHP图片操作库Imagine来实现图片尺寸调整和剪切 之后进行缓存

Munee可以自动编译LESS SCSS和CoffeeScript 并且可以把CSS+JS文件合并成一个单一的请求 此外 还可以对这些CSS JS文件进行精缩 让其拥有更好的性能表现 该库还可以轻易地与任何代码集成

Ratchet 我爱编程网

Ratchet是一个PHP库 WebSockets工具包 开发者可以使用它在客户端和服务器端之间构建实时 双向的App应用 并且可以快速简单地构建事件驱动应用程序(而不是传统的HTTP 请求/响应应用程序)

Swift Mailer

Swift Mailer是一个功能丰富的PHP邮件库 不依赖于PHP自带的mail() 函数 因为该函数在发送多个邮件时占用的系统资源很高 Swift直接与SMTP服务器通讯 具有非常高的发送速度和效率

Unirest

Unirest是一个轻量级的HTTP开发库 可用于PHP Ruby Python Java Objective C等开发语言 支持GET POST PUT UPDATE DELETE操作 它的调用方法与返回结果对所有开发语言来说 都是相同的

Detector

Detector是一个开源的PHP类库 用于检测用户的浏览器环境 它可以获得浏览器的使用情况和浏览器的HTML CSS 功能 并分析是否是移动 平板电脑 桌面或网页爬虫和其他项 如 颜色深度 视频尺寸 Cookie等 该库对每个浏览器用户都使用单一的用户代理字符串来自动适应新浏览器 版本和设备

PHP Thumb

PHP Thumb是一个PHP类 用来生成图片的缩略图 只需数行代码即可 支持多种图片来源 包括文件系统或者数据库 支持大多数图片格式 并可对图片进行旋转 剪切 加水印等等 可自定义缩略图的质量 提供内建的缓存以降低服务器的负载

Zebra Image

Zebra Image是一个开源的轻量级图像处理库 并且是一款面向对象库 只需PHP GD 扩展 并支持缩放 裁剪 旋转和翻转操作 它可以用于 jpg gif png等格式

Hybrid Auth

HybridAuth是一个开源PHP类库 用于通过微博/社交网站和ID来提供验证功能实现同步登录网站功能 它能够很方便的与现有网站相集成 只要引用一个文件并添加几行代码就能够实现登录 一旦验证 HybridAuth会提供连接用户的标准化相关资料 此外 除了验证功能 这个类库能够让我们与用户连接的social API客户端相交互

Gantt Charts

Gantti是一个开源的PHP类 帮助用户即时生成Gantt图表 使用Gantti创建图表无需使用JavaScript 是纯HTML CSS 图表默认输出非常漂亮 但用户可以自定义样式进行输出(SASS样式表)

Mobile Detect

Mobile Detect是一个PHP类 通过User Agent检测各种手机设备 并结合HTTP Header来检测移动设备环境 该类库最强大的地方是 它有一个非常完整的库 可以检测出所用的设备类型(包括操作类型 以及手机品牌等都能检测)和浏览器的详细信息

ImageWorkshop

顾名思义 ImageWorkshop是一个管理和操作图片的PHP类库 这个类拥有类似图片编辑软件的逻辑 基于层的概念 可以叠加很多层或层组(每一层不同的操纵选项) 它还支持许多功能 比如水印 裁剪 移动 缩放 旋转 叠加等

JqmPhp

JqmPhp是一个PHP开源类库 旨在简化jQuery与PHP来进行移动开发 用于生成使用jQuery Mobile框架所需要的HTML文件 该类库的文件是独立的 所以你可以根据需要来选择使用

PHP Image Cache

Image Cache是一个轻量级的PHP类 可以在用户浏览器里压缩 移动 缓存图片 这个类提供一些简单的设置如 目录 根路径URL等 然后针对每一张图片调用压缩功能

Imagine

Imagine是一个面向对象的PHP类库 用于图片操作 这个类库能够处理一些经常用到的操作如 缩放 裁剪 应用过滤等 其Color类库可用于对任意特定的颜色生成RGB值 并且还提供一些方法来绘制图形如 圆弧 椭圆 线 片等

lishixinzhi/Article/program/PHP/201404/30630

以上就是我爱编程网小编为大家带来的内容了,想要了解更多相关信息,请关注我爱编程网。
与“php爬虫框架推荐 Python,Node.js 哪个比较适合写爬虫”相关推荐
爬虫框架php Python爬虫技术与php爬虫技术对比,哪个更有优势?
爬虫框架php Python爬虫技术与php爬虫技术对比,哪个更有优势?

除了python可以爬虫还有哪些编程语言可以爬虫?能够做网络爬虫的编程语言很多,包括PHP、Java、C/C++、Python等都能做爬虫,都能达到抓取想要的数据资源。针对不同的环境,我们需要了解他们做爬虫的优缺点,才能选出合适的开发环境。(一)PHP网络爬虫需要快速的从服务器中抓取需要的数据,有时数据量较大时需要进行多线程抓取。PHP虽然是世界上最好的语言,但是PHP对多

2023-09-01 02:25:02
php动态爬虫框架 Python爬虫技术与php爬虫技术对比,哪个更有优势?
php动态爬虫框架 Python爬虫技术与php爬虫技术对比,哪个更有优势?

Python爬虫技术与php爬虫技术对比,哪个更有优势?首先要分清楚python和php的优势和劣势。php在web开发确实一定程度上优于python,但是如果做爬虫,python毫无疑问是最优的选择。理由如下:1:爬虫最大得困难在于反反爬。丰富的生态(Scrapy爬虫框架,selenium等等headless浏览器)让反反爬容易不少,文档丰富,各种库和driver极大的降低了爬虫编

2023-09-11 05:29:59
php爬虫框架搜索电影 php如何写爬虫?
php爬虫框架搜索电影 php如何写爬虫?

如何用PHP做网络爬虫其实用PHP来爬会非常方便,主要是PHP的正则表达式功能在搜集页面连接方面很方便,另外PHP的fopen、file_get_contents以及libcur的函数非常方便的下载网页内容。具体处理方式就是建立就一个任务队列,往队列里面插入一些种子任务和可以开始爬行,爬行的过程就是循环的从队列里面提取一个URL,打开后获取连接插入队列中,进行相关的保存。队列可以使用数

2023-09-15 02:22:58
php爬虫框架比较 开源爬虫框架各有什么优缺点
php爬虫框架比较 开源爬虫框架各有什么优缺点

php爬虫框架怎么安装说到做爬虫,大家都可能第一时间想到的是python,其实php也是可以用来写爬虫程序的。php一贯简洁、易用,亲测使用PHPspider框架10分钟就能写出一个简单的爬虫程序。一、PHP环境安装和python一样,PHP也需要环境,可以使用官网下载的PHP,也可以使用XAMPP、PHPstudy等集成环境下的PHP。比较推荐集成环境,省去单独安装Mysql数

2023-09-10 07:12:18
php爬虫用哪个框架 php爬虫框架怎么安装
php爬虫用哪个框架 php爬虫框架怎么安装

PHP有哪些流行的框架PHP有哪些流行的框架?PHP有哪些流行的框架?PHP作为一种十分流行的编程语言,拥有大量的应用领域和开源程序库。其中,PHP框架可以有效提高对PHP语言的理解和运用水平。框架作为一种用于开发网络应用程序的基础架构,可以让开发者在不同项目的开发中提高效率。在PHP框架领域中,有许多众所周知、使用广泛的优秀框架,其中一些常见的PHP框架如下:1.Lara

2023-09-15 23:48:29
php爬虫框架哪个好 哪个PHP 框架比较好?
php爬虫框架哪个好 哪个PHP 框架比较好?

哪个PHP框架比较好?最流行的PHP框架:Symfony,Laravel和Yii。SymfonySymfony是一套可重复使用的PHP组件,它允许开发者人员创建可扩展的,高效能的应用程序。它有30个组件可以选择,开发人员可以有足够的自由在RAD环境下进行试验和工作。SymfonyAPI还允许使用第三方应用来方便集成,它可以与流行的前端框架,例如AngularJS一起使

2023-09-16 10:40:23
php爬虫框架 php爬虫怎么运行
php爬虫框架 php爬虫怎么运行

php爬虫框架怎么安装说到做爬虫,大家都可能第一时间想到的是python,其实php也是可以用来写爬虫程序的。php一贯简洁、易用,亲测使用PHPspider框架10分钟就能写出一个简单的爬虫程序。一、PHP环境安装和python一样,PHP也需要环境,可以使用官网下载的PHP,也可以使用XAMPP、PHPstudy等集成环境下的PHP。比较推荐集成环境,省去单独安装Mysql数

2023-08-24 21:09:25
php爬虫框架phpcrawl php爬虫怎么运行
php爬虫框架phpcrawl php爬虫怎么运行

php如何写爬虫?据我所知,很多第三库都可以实现你所要求的这些php爬虫特征。如phpQuery,phpCrawl,phpSpider,Snoopy。如果使用curl,也是相当不错的。但你要做的事情更多。它只负责请求和下载,并没有实现爬虫的核心。别的事情都要自己做,至少你得先封装一下。如果你任务比较紧迫,建议选择那些第三方库,集成一下,能用先用着。业务时间还是了解一

2023-08-27 18:20:00