PHP 采集大全 采集原理分析 禁用采集 各种采集方法详解 采集的攻于防 采集性能 应用协议分析...

为什么80%的码农都做不了架构师?>>>   hot3.png

做了N年的PHP,采集了N家数据,由初学者菜鸟,到现在的熟手,采集天猫淘宝腾讯京东敦煌Lightinthebox大龙、zencart、magento、prestashop、opencart、xcart、踏踏。。。。对采集颇有诸多的理解。

现在给大家分析下,如有误,请指出。

我能想到的常用采集方法:

1. file 
支持应用层协议,返回的数据是以数组形式返回,需要开启allow_url_fopen.

长处:擅长处理本地文件
短处:不擅长处理URL这类的采集,大并发时会丢包、超时,适合处理本地小文件。

2. file_get_contents 
支持应用层协议,返回的数据是以字符串形式返回,需要开启allow_url_fopen.

长处:擅长处理本地文件
短处:不擅长处理URL这类的采集,大并发时会丢包、超时,适合处理本地小文件。

3. fopen 
支持应用层协议,返回的数据是以字符串形式返回,需要开启allow_url_fopen.

长处:擅长处理本地文件
短处:不擅长处理URL这类的采集,大并发时会丢包、超时,适合处理本地大文件。

4. copy 
支持应用层协议,直接把远程文件拉倒本地,成功返回true,失败返回false,需要开启allow_url_fopen.

长处:擅长处理本地文件
短处:需要把远程文件拽下来后,再正则分析抓取,占用硬盘,大并发时会丢包、超时,适合处理本地文件的拷贝。

//-------------------------//py by http://my.oschina.net/cart--------------------- 

5. curl 
支持应用层协议,需要开启CURL扩展

长处:采集时可以对DNS进行缓存,采集速度快。GET\POST\PUT\DELETE 模仿用户头信息、伪造IP、远程登录。。。
短处:不支持底层通信,如TCP\IP\UDP\CMP。。

6. socket 
支持通信层协议,需要开启socket扩展

长处:网络传输层和网络应用层的接口API,强大无比,CURL可以干的,socket也可以干,
socket可以干的,CURL不一定可以干。
短处:一般服务器默认不开启socket扩展,此乃属于网络编程,对技术人员要求较高。
只支持底层(通信层套接字)通信,不支持应用层通信。采集速度慢于CURL。

7. fsockopen 
支持通信层协议 PHP自带的方法 文件操作的方式 File

长处:功能同6中的socket,但这是PHP自带的方法,不需要扩展支持。是socket的又一次封装,使用更简单.
短处:采集速度慢于curl。

8.stream_socket_client 
支持通信层协议 PHP自带的方法 流操作的方式 Stream

长处:功能同6中的socket,但这是PHP自带的方法,不需要扩展支持。是socket的又一次封装,使用更简单.
短处:采集速度慢于curl。

9.readfile 
支持应用层协议,直接把远程文件拉倒本地,成功返回从文件中读入的字节数,失败返回false.

长处:基于缓冲区的大文件处理,适合大文件下载等应用。
短处:不能直接像curl那种直接下载大文件,否则出错,必须配合缓冲区使用。

读完上述,大家有何感觉?

个人推荐:

curl:基本涵盖所有的采集应用:蜘蛛爬虫、大文件下载、批量采集、浏览器伪装…更以采集速度快,可以缓存DNS所以采集速度快而闻名。

fsockopensocketstream_socket_client:更底层的处理,底层编程,如银行业务、游戏底层通信等,虽然慢,但是稳定。

fopenfilefilegetcontentscopy:更偏向适合本地文件的处理,处理远程文件的话,效果不佳,作者不推荐。

readfile:由于配合缓冲区的独特优势,更适合大文件的在线下载。而且下载不卡,对服务器拖累很小。

这里 顺便补充一句,

为什么我用fsockopen(socket)用TCP 80端口访问百度可以访问,
我浏览器直接输入tcp://www.baidu.com、tcp:http://www.baidu.com:80 却访问不了呢?

答:

PHP 采集大全 采集原理分析 禁用采集 各种采集方法详解 采集的攻于防 采集性能 应用协议分析..._第1张图片

因为浏览器是应用层,fsockopen(socket)是传输层, 天生就不支持那样的使用哦!

如果你的目标站点没有防采集措施,可以轻易使用Linux命令来达到轻松采集,一般用在下载网站模板、网站扒皮、批量采集场景:

wget -r -p -np -k https://www.oschina.net/

PHP Socket详解 - TCP/IP/UDP/ICMP - PHP自带函数关系 - curl

转载于:https://my.oschina.net/cart/blog/207151

你可能感兴趣的:(PHP 采集大全 采集原理分析 禁用采集 各种采集方法详解 采集的攻于防 采集性能 应用协议分析...)