【扯闲篇儿】关于PHP写爬虫的一些吐槽

写在正文前面:
(1)发布过一次了这一篇,然后点编辑不小心点了删除,还确认了。。。手贱,剁手。。。
(2)csdn,有回收站,可视为啥木有恢复呢?

原文如下- - - -

额,最近用PHP写了个爬虫,记记流水账,不谈细节,具体技术解决方案待以后有心情再整理。

Start

业务需求,抓取某竞品网站数据并导入自家数据库使用。
解决方案:

Part I 源网页抓取

方案:Curl方法
防屏蔽:代理(透明代理)

Part II 网页分析

方案:工具类 simple_html_dom
吐槽:
(1)速度比正则慢
(2)匹配不到时,正则数据为空,工具类缺会报错。
(3)注意点:

$dom = new simple_html_dom();
//解析过程
$dom->clear();//清理、释放内存,必不可少的一步!

优点:
简单易懂,开发速度快。

Part III 结果

(1)抓取特别慢
(2)效率特别不靠谱
(3)大量空网页

因为某列表页的抓取逻辑是,翻页,如果翻到一个页面没有数据了,则默认翻页结束,程序停止。有此,如果某个中间页面没抓到,那么可能所有的后续页面也不会抓到。。。【啊哈哈哈博主是个坑。。。

Then

补救性抓数据。因为如上方法,线下测试可用,线上因某些原因导致一直抓不到,被认为是线上IP(固定IP)遭屏蔽,透明代理遭看破【额,原谅我词穷】呵呵哒,没数据,补救呗~

Part I 抓取数据

请教大神,大神帮忙用Node.js写了个爬虫,然后爬了些数据导入线上库,不过数据量还是十分有限。。。。

Next

Node.js可用,但是线上环境部署自动化程序不适合用node,大神说可以翻译成php,然后又说php的curl方法做爬虫不够好,然后,推荐了一个工具类,Snoopy,看了一下挺好的,虽然还是有些小毛病。可用,而且抓取效率瞬间提升。

Part I 数据抓取

基础:Snoopy工具类
升级 I : 代理防屏蔽-proxy设置
升级 II : 使用百度蜘蛛的user-agent

$snoopy->agent = "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)";
Part II 数据解析

simple_html_dom 工具类

Part III 结果分析

整体效果好了很多,但是之前遗留的翻页为题仍然存在未解决。

End

解决翻页问题
整合了Redis。在第一页进入的时候,将所有列表存入redis,然后pop,只要redis中有数据,就持续抓取,而不再用之前的翻页判断逻辑【那就是个坑。。。博主当时脑子进水了。。。】

而且,就逻辑对断点支持力度很弱,改用redis后,程序断掉重启,只需判断redis中是否还有存留的数据没有处理完即可。简单方便~

That’s all~!
博主弱弱的,而且第一次写爬虫,总算在大神点拨下及百度Google帮助下解决了问题。

总结:写爬虫不要一爬不到数据就怪屏蔽~每次我跟领导说,我们的线上IP被对方屏蔽了,没法抓,然后再问大神之后,就能改一行代码程序瞬间跑的溜溜的,简直打脸!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值