phpsystem函数(如何用php 编写网络爬虫?)PHP函数 / PHP函数在爬虫开发中的实践...

wufei123 发布于 2024-05-15 阅读(26)

因本人曾经着手开发过一套蜘蛛池站群系统,里面就涉及到爬虫自动去全网范围找匹配关键词或者关键词密度达标的网页然后提速内容,再用NLP相关技术做伪原创后定时文章入库发布的这么一个模块,也是用php完成的开发,也在此跟大家分享分享我对爬虫的看法。

开发爬虫其实不用纠结用什么语言,只要对性能没有太高要求的情况下php完全够用,我也推荐php工程师就用php来做,省去了学习新语言的时间成本再说一次爬虫开发不难主要就是定位好你想实现的爬虫是什么类型按照现在网络上所有爬虫的作用及表现出来的特征,可以分成三个类型的爬虫:批量型、增量型、垂直型

phpsystem函数(如何用php 编写网络爬虫?)PHP函数 / PHP函数在爬虫开发中的实践...

批量型,有明显的抓取范围和目标,设置抓取时间的限制、抓取数据量的限制或抓取固定范围内页面的限制等,当爬虫的任务达到预先设置的目标就会停止一般来说采集工具或者内容采集任务,就属于批量型,一般只抓取固定网站的固定内容,或者设置对某一资源的固定目标数据量,当抓取的数据或者时间达到设置限制后就会自动停止,这种爬虫就是典型的。

批量型爬虫增量型,也可叫通用型百度,google,搜狗,等搜索引擎的爬虫就可以称之为增量型爬虫增量型和批量型不同,没有固定目标、范围和时间限制,一般会无休止地抓取下去,直到把全网的数据抓完为止增量型一般来说不仅仅需要爬取尽可能全的页面,还要对已经爬取到的页面进行相应的再次爬取和更新。

因为这些爬虫爬进数据库的页面不是一成不变的,可能会做更新,甚至是404,一般来说好点一的增量型爬虫这些功能应该都是标配,至于去重,排名啥的不在本次回答中做探讨垂直型,也可以叫聚焦爬虫,只对固定的主题内容或固定的行业网页进行爬取,一般都会聚焦在某一个限制范围内进行增量型的抓取。

垂直型爬虫不像增量型爬虫一样追求那么大的和全覆盖面,而是在增量型爬虫上增加一个抓取网页的限制,根据需求抓取含有目标内容的网页,不符合要求的网页就让它静静地躺在url队列里面吧比如说我前面做的蜘蛛池内容爬虫模块就是这种垂直型的爬虫。

上面给大家大概介绍了一下爬虫类别,我猜大家差不多应该也能大概的对自己想开发的爬虫有个定位了说点技术关键词,在着手开发的时候直接查这些词,然后利用起来就行了CURL:这个不用说,你想去爬一个页面肯定是需要先请求这个页面的,拿到对方服务器返回的数据(一般来说是html,如果你直接摸透了别人的。

api接口就当我没说过这句话 )simple_html_dom:html节点解析器,前面你用curl请求回html文档后就用这个解析一下dom节点,方便匹配自己需要的采集爬取的内容正则表达式:用来匹配你想要的内容,跟simple_html_dom一样的作用,不过灵活性会更强一点。

如果两者搭配,会更丝滑顺畅哈哈:)Workerman或者swoole:用来做多线程或者多进程,提高效率用本人更推荐workerman,为啥哈,因为学习成本低,文档清洗明了,好学!swoole对新手确实挺不友好的,但是功能相对workerman还是更强一点,在此不展开讨论。

Redis:存url队列用,如果不追求太高效率可以忽略入门级别的爬虫差不多就这几个关键词就够用了,真正想去研究分布式爬虫追求日采集上千万级的量,我更建议出门左拐去Python或者其他语言话题下提问最后再来说说实现思路吧。

首页一个爬虫是需要一个种子页面的,比如“中国新闻网”首页,这个爬虫就用curl请求这个种子页面,获得html数据后用正则表达式匹配出所有a标签的href属性,然后再根据自己定义的一些规则匹配出符合规则的url或者自己处理过的url,比如有的a标签会存在没有http或者https头的现象,或者存在“/news/gn/”这种没有域名的url,这个时候就需要稍微的做一下判断处理,把该加的加上,然后把这个url用sha1加密一下,再用这个hash去数据库中查一下有没有一样的hash,如果有就说明这个url已经有了(去重),然后再把这个url和hash同时存入url队列数据库中即可。

做完上面这些操作后,一定记得给这个爬取过的url打个已爬取过的状态,避免重复爬取然后再从数据库查一条新入库没有被爬取过的一条url再重复前面的操作,这样你的爬虫就成型了,他会不断地给你的url队列里面添加url。

关键时候到了,如果我们只是单纯的去爬url放数据库也没用啊,对不对这个时候就要说到内容采集了,url有了,这个时候再写一个爬虫不断地去把url库中的url拿出来去把这个页面的内容爬回来,然后写规则把内容匹配出来,存进数据库即可。

大功告成这个入门级爬虫就写好啦不过真实的爬虫开发工作中肯定会碰到很多很多问题意外问题,比如:蜘蛛陷阱、反爬虫、动态加载的内容爬不到、效率问题、碰到异常后程序报错停止运行后有没有机制重启、法律风险、等等各种问题。

后面这些各种问题就留给大家后面自己去实战中自己解决吧,因为每个人的业务不一样,报的错肯定都不一样,这里没办法说的太清,这篇文章主要的目的还是给大家提供一个思路而已,我也欢迎大家加我v我们一起交流讨论爬虫的各种知识和技能,我的v(oooxwov)如果人多的话我也可以拉一个交流群,方便大家交流学习。

一不注意写了两千多字,我也懒得审核句子通不通,有没有错别字了,大家将就看。有问题jia我vx。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

河南中青旅行社综合资讯 奇遇综合资讯 盛世蓟州综合资讯 综合资讯 游戏百科综合资讯 新闻5705