我是如何零基础开始能写爬虫的

大家好,为什么不建议用scrapy相信很多的网友都不是很明白,包括不建议做爬虫工作吗也是一样,不过没有关系,接下来就来为大家分享关于为什么不建议用scrapy和不建议做爬虫工作吗的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

本文目录

  1. 爬虫面试问题及答案
  2. 为什么不建议用scrapy
  3. 爬虫技术违法吗
  4. 为什么php不适合做计算密集型业务

爬虫面试问题及答案

1.爬虫面试问题和答案是存在的。2.因为在爬虫领域中,面试官会根据候选人的经验和技能来提出一些问题,以此来评估候选人的能力。常见的问题包括:爬虫的工作原理、反爬虫机制、如何处理网站的动态内容、如何处理异常情况等。对于这些问题,候选人需要有扎实的理论基础和实践经验,才能够给出准确的答案。3.如果想要在爬虫领域有更好的发展,需要不断学习和实践,掌握更多的技能和经验。同时,也需要注重自己的沟通能力和团队合作能力,这些都是在面试中会被考察的重要因素。

为什么不建议用scrapy

scrapy提高了自己的并发能力,但是这对于一般的爬虫工作是无效的,你的并发量上去,人家的网站服务压力暴增服务挂掉,要不你拿不到任何数据,要不就是拿不到数据。而且现在的反爬机制也让这些高并发特性显得不那么突出。

听说过这个框架的人都有了解,这个框架对于开发人员来说是没有主动权的,引擎自动的帮开发者调用着一切,再给我们便利的同时也给我们带上了一条枷锁,让我们收到限制。

爬虫技术违法吗

先说结论,技术无罪,有罪的是人。爬虫技术本身是不违法的,但是如果利用爬虫技术做损害他人利益的事情就是违法的了。

具体的法律条文,我也记不大清了,目前对于爬虫技术的使用界限没有一个特别明确的规定,按照我之前咨询律师得到答案,大概就是关乎这三个方面:采集途径、采集行为、使用目的。

通过什么途径爬取数据,这个是最需要重视的一点。总体来说,未公开、未经许可、且带有敏感信息的数据,不管是通过什么渠道获得,都是一种不合法的行为。

采集行为上使用技术手段应该懂得克制,一些容易对服务器和业务造成干扰甚至破坏的行为,容易违法

还有就是使用目的,就算你通过合法途径采集的数据,如果对数据没有正确的使用,同样会存在不合法的行为。一种情况是公开收集的数据,但没有遵循之前告知的使用目的。比如有些网站上标明内容不得用于商业行为,还有未经授权不得转载的,些都是有法律明文保护,所以要注意使用。

最后,结合实际情况,给几点建议吧

1、爬虫访问频次要控制,别把对方服务器搞崩溃了

虽然你爬取的信息都是公开的,也不涉及公民隐私,爬取的数据也不用于违法获利,只是自己弄着玩,但是如果你的爬虫太疯狂了,一分钟请求1万次,导致对方服务器应接不暇,不能处理正常业务了,对不起,你这种属于违法行为,这种爬虫等同于进行黑客攻击了,你让人家不能正常工作了,损害了对方的利益

2、涉及到个人隐私的信息你不能爬

其实这很好理解,你希望你自己的电话号,身份证号,家庭住址,工作单位,行踪轨迹这些隐私信息被别人用爬虫抓取么?当然不希望,别人抓了你的这些信息,你肯定想去报警对不对,让警察去抓那个坏蛋,ok,你不要去做那个坏蛋。

3、突破网站的反爬措施,后果很严重

正规的网站都会在根目录下放置robots.txt,这里就规定了哪些能爬,哪些不能爬,谁可以爬,比如知乎的robots.txt,人家希望搜索引擎来爬它,其他的,一概不接受

不过呢,知乎并没有做特别严厉的反爬措施,这就是说,如果你偷偷的爬一点东西,不影响它的正常服务,它也懒得找你麻烦,但对于那种反爬特别严重的,例如淘宝,你最好别去爬,如果你真的利用你的高智商突破了淘宝的反爬措施,那么恭喜你,你已经违法了

4、不要用爬取的数据做不正当竞争

比如你把大众点评的评论数据都爬下来了,然后自己搞了一个xx点评,这肯定不行,人家辛辛苦苦的积累的数据,你轻轻松松的弄下来,直接拿来主义,跟人家搞竞争,你不违法谁违法。

5、付费内容,你不要抓

既然是付费内容,说明这东西价值很高,付费才能看,你弄下来了,你想干啥?你私自传播,就对网站造成了潜在损失。

6、最后一条,突破网站反爬措施的代码,最好不要上传到网上

你技术很牛逼,能突破网站的反爬措施,你把这些代码发布到网上,比如github,你自己没做啥坏事,可是想做坏事的人利用了你的代码,入侵了网站,那么,这种情况下,你也是有责任的,这个听起来有点冤,但确实存在这样的风险,所以,最好还是不要这么干

为什么php不适合做计算密集型业务

PHP即“超文本预处理器”,是一种通用开源脚本语言。PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言。PHP独特的语法混合了C、Java、Perl以及PHP自创的语法。利于学习,使用广泛,主要适用于Web开发领域。

1.优点:开源免费性快捷性[程序开发快,运行快,技术本身学习快]

1)跨平台,性能优越,跟Linux/Unix结合别跟Windows结合性能强45%,并且和很多免费的平台结合非常省钱,比如LAMP(Linux/Apache/Mysql/PHP)或者FAMP(FreeBSD/Apache/Mysql/PHP)结合,或者数据应用够大可以考虑换PostgreSQL或者Oracle,支持N种数据库。(N>=10)

2)语法简单,如果有学习C和Perl的很容易上手,并且跟ASP有部分类似。有成熟的开发工具,比如NuPHPed,或者ZendStudio等等,再Linux平台下可以使用Eclipse等等。

3)目前主流技术都支持,比如WebService、Ajax、XML等等,足够应用。

4)有比较完整的支持,比如使用ADODB或者PEAR::DB做数据库抽象层,用Smarty或者smarttemplate做模板层,如果是PHP5.1的话,还能够使用PDO(PHPDataObject)来访问数据库。

5)有很多成熟的框架,比如支持MVC的框架:phpMVC,支持类似ASP.net的事件驱动的框架:Prado,支持类似RubyOnRails的快速开发的框架:Cake等等,足够满足你的应用需求。

6)PHP5已经有成熟的面向对象体系,能够适应基本的面向对象要求。适合开发大型项目。

7)有成熟的社区来支持PHP的开发。

8)目前已经很多大型应用都是使用PHP,比如淘宝网、Yahoo、163、Sina等等大型门户,很多选用PHP来作为他们的开发语言,所以大型门户都能够选用它,我想足够能够你的使用了。

9)有很多开源的框架或开源的系统可以使用,比如比较知名的开源框架有ZendFramework、CakePHP、CodeIgniter、symfony等,开源论坛有Discuz!、Phpwind等,开源博客WordPress,开源网店系统如Ecshop、ShopEx等,开源的SNS系统如UCHome、ThinkSNS等。

10)使用成本低(linuxapachemysqlphp内核)

2.缺点

1)函数命名不规范驼峰法和下滑线,传参位置不一你知道的

2)单线程;PHP本身,一直以来php就是个单进程的程序;虽然php的pthreads扩展早就有了。但是它不够稳定,运行运行着就会莫名其妙的自己挂掉;php的扩展都是C写的,这也就意味着任何一个扩展出现线程竞争资源控制问题都能让整个挂掉

3)核心异步网络不支持(当然在linux只有同步非阻塞网络模型)。却少了这个使得很难开发一个能够承受大并发的网络应用。传统的网络模型和io都阻塞的。这样基本的编程的做法就是一个进程(或者线程)响应一个用户链接请求。因此无法完成像实时网游那样需要成千上万网络连接的任务。尽管php也有Libevent、eio扩展对此算是某种程度上面的弥补,但是感觉都不是那么完善

4)只支持web开发,不方便做.exe文件,不方便做桌面应用程序.不方便做手机程序.

5)不适合做爬虫、自动运行脚本.科学运算项目,这语言基本构架就不适合,虽然有很多方法实现。

6)后期维护困难。后期提速空间局限性较大。

在对PHP有一个大致的认识以后,我们来了解一下为什么说PHP慢?

PHP的慢是相对于C/C++级别的语言来说,事实上,PHP语言最初的设计,就不是用来解决计算密集型的应用场景。我们可以这样粗略理解为,PHP为了提升开发效率,而牺牲了执行效率。

我们知道PHP一个很大的特点,就是弱类型特性,也就是说,我可以随意定义一个变量,然后给它随意赋值为各种类型的数据。以一个int整型数字为例子,在C语言中:

intnum=200;//通常是4字节

但是,如果是PHP定义了一个同样的变量,实际对应的存储结构则是:

这个结构体将会占据远比C变量多得多的内存,PHP中定义方式如下:

$a=200;//这变量将实际占用对比C变量很多倍的存储空间。

其实对PHP来说,无论存储什么类型的数据,都是用上述“通杀”的结构体实现。为了兼容PHP程序员的变量类型“乱入”,PHP做到了对开发者的友好,但是对执行引擎很残酷。单个变量内存消耗可能还不明显,一旦用到PHP的数组等,则复杂度指数上升(数组的实现是HashTable)。然后,Zend引擎执行时,将这些PHP代码编译为opcode(PHP的中间字节码,格式有点类似于汇编),由Zend引擎逐行解释执行。

无论是字符串的连接操作,还是数组的简单修改等,几乎都是“PHP程序员一句话,Zend引擎跑断腿”的节奏。因此,同样的操作,对比C来说,PHP消耗了更多的CPU和内存等系统资源。除此之外,还有内存自动回收、变量类型判断等等,都会增加系统资源的消耗。

例如,我用纯PHP实现的快速排序函数和原生sort函数,排序10000个整型数字,来做一个耗时对比,结果如下:

原生的sort耗时3.44ms,而我们自己实现的PHP函数sort则是68.79ms。我们发现,两者执行效率差距巨大。我的测试方式,是计算函数执行前后的时间间隔,而不是整个PHP脚本从启动到结束的时间。PHP脚本启动和关闭过程,本身有着一系列的初始化和清理工作,也会占据不少的耗时。

通常情况下,PHP执行效率的排行是:

最快的是PHP语言结构(isset、echo等),PHP语言的一部分(它们根本不是函数)。

然后比较快的就是PHP的原生和拓展函数。PHP拓展,基于ZendAPI之上,用C实现的功能,执行效率和C/Java是属于同一个数量级的。

真正慢的就是,我们通过PHP自己写的代码和函数。例如,假如我们使用的比较重的纯PHP实现的框架,因为框架本身的模块很多,所以,会明显拖累语言层面的执行效率,同时占据更多的内存。(国内的Yaf框架,以拓展的方式实现,因此执行效率远快于纯PHP写的框架。

在一般情况下,我们并不推荐用过PHP实现逻辑复杂计算类型的功能,尤其是Web系统流量比较大的场景下。因此,PHP程序员应该对PHP的各种原生函数和各类拓展有一个比较广泛的了解,在具体的功能实现场景中,寻求更原生的解决方案(原生接口或者拓展),而不是自己写一堆复杂的PHP代码来实现这类型功能。

如果有足够的PHP拓展开发实力,将这类型业务功能重写为一个PHP拓展,也会大幅提升代码的执行效率。这是一个非常不错的方式,也被广泛应用PHP优化中。但是,自己编写的PHP业务拓展的缺点也很明显:

拓展开发耗时比较长,需求变更的时候修改也复杂,写得不好可能会影响Web服务稳定性。(例如,在Apache的worker模式下,多线程场景下挂掉,会影响同一个进程下的其他正常子线程。如果是多线程的Web模式,编写拓展还需要支持线程安全)

拓展在PHP版本升级的时候,可能需要做额外的兼容工作。

人员变动后的维护和接手成本也比较高。

实际上,在互联网一线企业中,更常见的解决方案,并非增加PHP拓展,而用C/C独立写一个服务server,然后PHP通过socket和服务server通信来完成业务处理,并不将PHP本身和业务耦合在一起。

不过,Web服务大部分的性能瓶颈都在网络传输和其他服务server的耗时上(例如MySQL等),PHP执行的耗时在整体耗时的占用比例非常小,所以从业务角度来说,影响可能并不明显。

文章到此结束,如果本次分享的为什么不建议用scrapy和不建议做爬虫工作吗的问题解决了您的问题,那么我们由衷的感到高兴!

scrapy elasticsearch实现搜索引擎