码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2014-11-04 14:43:59      阅读:266      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   os   使用   sp   strong   

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

做了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:更底层的处理,底层编程,如银行业务、游戏底层通信等,虽然慢,但是稳定。

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

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

 

这里 顺便补充一句,

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

答:

bubuko.com,布布扣

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

本文转自http://my.oschina.net/cart/blog/207151

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

标签:style   blog   http   io   ar   os   使用   sp   strong   

原文地址:http://www.cnblogs.com/chenqionghe/p/4073567.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!