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

//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 却访问不了呢?

答:

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

本文转自http://my.oschina.net/cart/blog/207151
时间: 2024-11-06 03:34:52

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

SylixOS调试方法详解——性能分析

1. SylixOS调试方法介绍 SylixOS实现了一个功能强大的调试stub(桩),可在设备或模拟器上在线调试应用程序,RealEvo-IDE也提供配套的调试插件.目前RealEvo-IDE既支持自动推送调试.也支持传统的手动启动gdbserver的调试方式.在官方公布的使用手册中没有详细写出在日常开发中非常实用的几种调试方式,本文主要介绍性能分析的调试方法. 在日常开发过程中经常会遇到程序不够快的情况,但是不知道到底慢在哪里,往往是随意寻找函数优化,并没有没有真正定位到程序哪里慢,存在很大

SylixOS 调试方法详解——静态代码分析

1. SylixOS调试方法介绍 SylixOS 实现了一个功能强大的调试 stub,可在设备或模拟器上在线调试应用程序,RealEvo-IDE 也提供配套的调试插件.目前 RealEvo-IDE 既支持自动推送调试.也支持传统的手动启动 gdbserver 的调试方式.在官方公布的使用手册中没有详细写出在日常开发中非常实用的几种调试方式,我们通过新建几个App工程来做相应的演示,主要有代码静态分析.代码覆盖率检查.性能分析以及一个实战案列的演示,本文主要介绍代码静态分析调试. 2. Sylix

图像小波变换原理_图像小波变换的matlab实现详解

小波变换的原理 所谓的小波的小是针对傅里叶波而言,傅里叶波指的是在时域空间无穷震荡的正弦(或余弦波). 相对而言,小波指的是一种能量在时域非常集中的波,它的能量有限,都集中在某一点附近,而且积分的值为零,这说明它与傅里叶波一样是正交波. 举一些小波的例子: 可以看到,能量集中在x轴0值附近,以y轴的0值为基线,上下两个区域的波形面积相等. 众所周知,图像的傅里叶变换是将图像信号分解为各种不同频率的正弦波.同样,小波变换是将图像信号分解为由原始小波位移和缩放之后的一组小波. 小波在图像处理里被称为

详解大数据采集引擎之Sqoop&采集oracle数据库中的数据

欢迎关注大数据和人工智能技术文章发布的微信公众号:清研学堂,在这里你可以学到夜白(作者笔名)精心整理的笔记,让我们每天进步一点点,让优秀成为一种习惯! 一.Sqoop的简介: Sqoop是一个数据采集引擎/数据交换引擎,采集关系型数据库(RDBMS)中的数据,主要用于在RDBMS与HDFS/Hive/HBase之间进行数据传递,可以通过sqoop import命令将RDBMS中的数据导入到HDFS/Hive/HBase中,也可以通过sqoop export命令将HDFS/Hive/HBase中的

HTTP协议报文、工作原理及Java中的HTTP通信技术详解

一.web及网络基础       1.HTTP的历史            1.1.HTTP的概念:                 HTTP(Hyper Text Transfer Protocol,超文本传输协议)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器.                 它是一个应用层协议,承载于TCP之上.由请求和响应构成,是一个标准的客户端服务器模型            1.2.HTTP的发展历史:          

jQuery源码分析(九) 异步队列模块 Deferred 详解

deferred对象就是jQuery的回调函数解决方案,它解决了如何处理耗时操作的问题,比如一些Ajax操作,动画操作等.(P.s:紧跟上一节:https://www.cnblogs.com/greatdesert/p/11433365.html的内容) 异步队列有三种状态:待定(pending).成功(resolved)和失败(rejected),初始时处于pending状态 我们可以使用jQuery.Deferred创建一个异步队列,返回一个对象,该对象含有如下操作: done(fn/arr

平衡二叉搜索树(AVL树)的原理及实现源代码(有图文详解和C++、Java实现代码)

一.AVL树(平衡二叉搜索树)是什么? AVL树是根据它的发明者G.M. Adelson-Velsky和E.M. Landis命名的.AVL树本质上还是一棵二叉搜索树,它的特点是: 1.本身首先是一棵二叉搜索树. 2.带有平衡条件:每个非叶子结点的左右子树的高度之差的绝对值(平衡因子)最多为1. 例如: 5             5 / \            /  \ 2   6         2   6 / \    \         / \ 1  4   7       1  4

《深入理解mybatis原理》 MyBatis的一级缓存实现详解 及使用注意事项

0.写在前面 MyBatis是一个简单,小巧但功能非常强大的ORM开源框架,它的功能强大也体现在它的缓存机制上.MyBatis提供了一级缓存.二级缓存 这两个缓存机制,能够很好地处理和维护缓存,以提高系统的性能.本文的目的则是向读者详细介绍MyBatis的一级缓存,深入源码,解析MyBatis一级缓存的实现原理,并且针对一级缓存的特点提出了在实际使用过程中应该注意的事项. 读完本文,你将会学到: 1.什么是一级缓存?为什么使用一级缓存? 2.MyBatis的一级缓存是怎样组织的?(即SqlSes

JDK源码分析(12)之 ConcurrentHashMap 详解

本文将主要讲述 JDK1.8 版本 的 ConcurrentHashMap,其内部结构和很多的哈希优化算法,都是和 JDK1.8 版本的 HashMap是一样的,所以在阅读本文之前,一定要先了解 HashMap,可以参考 HashMap 相关:另外 ConcurrentHashMap 中同样有红黑树,这部分可以先不看不影响整体结构把握,有兴趣的可以查看 红黑树: 一.ConcurrentHashMap 结构概述 1. 整体概述 CHM 的源码有 6k 多行,包含的内容多,精巧,不容易理解:建议在