位置: 编程技术 - 正文

php采集神器cURL使用方法详解(php采集系统)

编辑:rootadmin

推荐整理分享php采集神器cURL使用方法详解(php采集系统),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:php 采集,phpyun采集,phpyun采集,php 采集,php采集系统,phpyun采集,php采集系统,php 采集,内容如对您有帮助,希望把文章链接给更多的朋友!

对于做过数据采集的人来说,cURL一定不会陌生。虽然在PHP中有file_get_contents函数可以获取远程链接的数据,但是它的可控制性太差了,对于各种复杂情况的采集情景,file_get_contents显得有点无能为力。因此,本文将为你介绍采集神器cURL的使用。

先给大家补充一下file_get_contents函数可以获取远程链接数据的方法。

这段代码会直接使用curl显示文件内容,但是问题来了,因为curl是php的扩展,有的主机为了安全会金庸curl的,宁外php本地调试的时候也是关闭curl的,所以会发生报错,所以这段代码是不可取的,所以云落对他重新改写了

修改后的版本是对curl扩展做一个判断,看看服务器到底有木有打开curl扩展,如果打开了,就直接显示文件,如果没打开就显示一段提示文字。虽然修复了问题,但是又有一个问题来了,我只是显示一段文字而已,我也不是是用什么做什么大事的,所以我为什么要写那么多的代码呢??经过一些瞎掰的检测,发现file_get_contents获取远程文件内容的速度不比curl慢,在一些文件较少的情况下可能还比curl扩展要快得多,所以我又重写了代码

工具火狐浏览器(FireFox) + Firebug“工欲善其事,必先利其器。” 在分析案例之前,先让我们学习一下如何利用神器Firebug获取我们必要的信息。使用F打开Firebug,我们可以得到如图(一)界面:

1、箭头图标是“元素选择”工具,单击一次会高亮图标,同时,鼠标在页面内的移动会同时在HTML菜单中选定相应的内容,此时单击内容则表示选定了该元素,图标高亮取消。如图(二)所示:Firebug查看元素

2、控制台JS里面的console.log系列函数的打印就是在这里输出。3、HTMLHTML内容,注意这里看到的不一定是采集要解析的内容,采集时候对内容的分析,一律以查看源码(Ctrl+U)为准,这里只是能快速定位元素的结构,然后再选择一个比较特殊的参照,在源码中定位相应的位置。比如,你在HTML里面看到一个标签是<div id="demo" class="demo">Demo</div>,但是你查看源码时候看到的内容可能是<div class="demo" id="demo">Demo</div>,如果你对采集内容按照前者去做正则匹配,那么你会得不到结果。4、CSS这里是CSS文件内容5、脚本这里是Javascript文件内容6、DOMDom节点内容7、网络每一个请求链接的数据,这里是我们采集要关注和分析的地方,它能够显示每一个请求的参数、请求头、Cookie数据等。在页面提交会刷新的情况下,需要使用保持,使得页面请求内容在刷新后仍然留着控制台中,如图(三)所示:

另外,火狐还有一款 Tamper data 扩展也能得到请求数据,必要时可以安装使用。8、CookiesCookie数据

在图(一)中还看到下面有很多可选的小菜单项,其中保持是我们要关注的,当选择它的时候,即使提交表单刷新了页面,下面内容区域的数据还是会保留,这个对于分析提交数据特别关键。

总结我们在分析采集请求的时候,主要关心“网络”菜单里的请求数据,必要时候使用“保持”以查看刷新页面的请求数据,请求前可以使用“清除”先清除下面的内容。

案例解析一、简单的采集这里所指的简单采集,是指一个单一页面GET请求的采集,它简单得即使通过file_get_contents函数也能轻松获得页面返回结果。

代码片段之file_get_contents

代码片段之cURL

二、需要参数的采集这种情况,页面请求需要传入一些参数,可以是GET请求,也可以是POST请求。这种情况的采集,使用file_get_contents外带一些参数还是可以实现的,但是这里我们将不再展示。

代码片段之cURL GET这种请求,我们可以选择搜索引擎作为演示,比如我百度搜索一个词语“PHP cURL”,在输入回车后,我们会得到一个类似 wd 参数就是我们要传入的动态参数,而其他参数则可以不变,因此得到我们下面的采集代码。

有些时候,一些参数并不是必须的,这时候我们可以删掉它,比如上面的链接可以只保留 这个参数可能影响结果的编码,所以暂且留着它。就这样简单的代码,我们就可以采集到百度搜索的结果了。

代码片段之cURL POST对于POST类型的请求,我们平时并不少见,比如有些搜索就是使用POST方式提交,这时候我们就需要使用POST类型来提交参数了。这个在PHP cURL里面有相应的参数:CURLOPT_POST 和 CURLOPT_POSTFIELDS , CURLOPT_POST 的设置可以指定当前提交是否为POST方式,CURLOPT_POSTFIELDS则用于设定提交的参数,可以是参数串,也可以是参数数组,比如:

下面是我做的一个POST模拟搜索PHP POST 搜索,后端是使用了前面的百度关键词搜索,基本原理就是,客户端提交一个关键词到我服务器,我服务器使用该关键词请求百度的搜索,然后得到结果,返回到客户端。如图(四)是利用Firebug对请求数据的分析,得到我们需要提交的请求链接和请求参数:

然后下面是我们的代码:

三、需要Referer的采集对于一些程序,它可能判断来源网址,如果发现referer不是自己的网站,则拒绝访问,这时候,我们就需要添加CURLOPT_REFERER参数,模拟来路,使得程序能够正常采集。

php采集神器cURL使用方法详解(php采集系统)

search_refer.php的源码如下,做了简单的Referer判断拦截:

四、需要cookie支持的采集对于模拟登录的应用,单单提交参数和模拟来路并不能解决问题,这时候我们就需要保存或者提交相应的Cookie参数,这个在PHP cURL里面也提供了相应的参数:CURLOPT_COOKIE: 直接使用字符串方式提交cookie参数CURLOPT_COOKIEFILE: 使用文件方式提交cookie参数CURLOPT_COOKIEJAR: 保存提交后反馈的cookie数据

下面是PHP的模拟登录示例:

五、压缩网页采集(gzip)有些没有接触过压缩页面的朋友估计会在这里被坑死,因为他们会发现采集回来的内容是乱码,并且无论使用iconv还是强大的mb_convert_encoding都无法还原数据,然后又没有概念,各种抓狂却找不到方法,哈哈,我曾经也是这样~如图(五)是乱码表现形式:

还好最后功夫不负有心人,还是找到了,它就是CURLOPT_ENCODING参数。比如,采集搜狐的新闻时候就遇到gzip压缩问题,下面是示例:

手册说明:支持的编码有"identity","deflate"和"gzip"。如果为空字符串"",请求头会发送所有支持的编码类型。后面一句表明,使用curl_setopt($ch, CURLOPT_ENCODING, "");也是可以的,但是不能不加这个参数。

六、SSL链接的采集有些请求链接是https类型的,这时候使用cURL采集可能会失败,这时候,我们可以使用 var_dump(curl_error($ch));的方法打印错误提示,然后根据错误提示查找相应的解决方案。比如SSL错误常见提示:SSL certificate problem: unable to get local issuer certificate,这时候,我们就需要利用参数:CURLOPT_SSL_VERIFYPEER 和 CURLOPT_SSL_VERIFYHOST 来禁用SSL证书的验证,我尝试过只使用CURLOPT_SSL_VERIFYPEER参数禁用失败,所以大家最好同时使用两个参数。下面是代码示例:

七、代理采集大家都知道,国内存在万恶的墙,所以,假如我们需要获取某些被墙数据时,就需要用到国外代理服务器;又或者我们需要采集大量数据时,需要不断切换IP,也会用到代理。使用代理在PHP cURL里面有几个相对应的参数:CURLOPT_PROXY、CURLOPT_PROXYPORT 和 CURLOPT_PROXYUSERPWD,还有另外几个,这里不列举。CURLOPT_PROXY 指定代理IP参数CURLOPT_PROXYPORT 指定代理端口参数CURLOPT_PROXYUSERPWD 指定需要验证的代理的账号密码,"[username]:[password]"格式的字符串

关于代理账号获取,大家自己发挥,我这里提供网上搜索到的一个列表:cURL 高匿代理

下面是代理采集示例:

八、 多线程采集对于大量采集工作,为了提高采集效率,使用PHP cURL提供的多线程采集是必不可少的。手册上提供的多线程采集例子好像都不太好用,我刚开始也从里面测试了几个例子,但是发现都是执行卡死,根本无法执行完成,前几天突然又测试了一下,然后发现curl_multi_info_read函数下面的Example #1是可以执行的,它的内容在$res上,但是没有打印出来,而且雅虎的请求比较慢,会卡住,前面两个链接都能正常返回。不过,还好当时的例子不好用,然后我经过搜索找到了一个很厉害的项目,CurlMulti ,它对PHP cURL Multi 进行了一个良性扩展的封装,能够很好地提供采集支持。关于CurlMulti的使用我就不多介绍,官网上面提供了demo,使用过程有技术难题可以直接加入Q群讨论,作者@Ares 和其他的采集大牛都会提供技术解答帮助。下面是PHP cURL Multi的一个简单示例:

九、跳转(跳转)对于一些应用,比如模拟登录,如果遇上跳转,会导致cookie丢失而使得模拟登录失败,请求现象如图(六)所示:

这个时候,可以使用:

关于CURLOPT_FOLLOWLOCATION,手册说明是:

启用时会将服务器服务器返回的"Location: "放在header中递归的返回给服务器,使用CURLOPT_MAXREDIRS可以限定递归返回的数量。我个人理解,通俗点讲就是后面的跳转会继续跟踪访问,而且cookie在header里面被保留了下来。

十、模拟上传文件在PHP手册的curl_setopt函数中,关于CURLOPT_POSTFIELDS有如下描述:

对于上传文件,这句话包含两个信息:

1. 要上传文件,post的数据参数必须使用数组,使得Content-Type头将会被设置成multipart/form-data。2. 要上传文件,在文件名前面加上@前缀并使用完整路径。因此,模拟文件上传可以按照如下实现:

本地测试的时候,在upload.php文件中打印出\(_POST和$_FILES即可验证是否上传成功,如下: ``` <&#;php print_r()_POST);print_r($_FILES);

输出结果类似:

关于CURLOPT_POSTFIELDS的赋值,另外补充一句描述:传递一个数组到CURLOPT_POSTFIELDS,cURL会把数据编码成 multipart/form-data,而然传递一个URL-encoded字符串时,数据会被编码成 application/x-www-form-urlencoded。

即:

这样一个功能强大的采集神器cURL的使用方法为大家介绍到这,希望对大家的学习有所帮助。

PHP常见漏洞攻击分析 综述:PHP程序也不是固若金汤,随着PHP的广泛运用,一些黑客们也在无时不想找PHP的麻烦,通过PHP程序漏洞进行攻击就是其中一种。在节,我们将从全

PHP编写RESTful接口的方法 这是一个轻量级框架,专为快速开发RESTful接口而设计。如果你和我一样,厌倦了使用传统的MVC框架编写微服务或者前后端分离的API接口,受不了为了一

PHP设计模式之观察者模式实例 首先了解观察者模式的概念:一个对象通过添加一个方法(该方法允许另一个对象,即观察者注册自己)使本身变得可观察。当可观察的对象更改时,

标签: php采集系统

本文链接地址:https://www.jiuchutong.com/biancheng/289851.html 转载请保留说明!

上一篇:PHP 使用 Imagick 裁切/生成缩略图/添加水印自动检测和处理 GIF(php 使用 AWS kinesis)

下一篇:PHP常见漏洞攻击分析(phpinfophp漏洞利用)

  • 印花税需要计提吗?怎么做会计分录
  • 公对公转账在手机上怎么操作
  • 产品成本计算的基本方法和辅助方法的划分标准是
  • 开民工工资专户
  • 纳税申报表真伪验证
  • 万元版和十万元版可以一起用吗
  • 增值税 附表三
  • 已申报未导入是申报成功了吗
  • 营改增是初次分配还是再分配
  • 自产农产品加工后仍属于附注的农产品,免税吗?
  • 修理费没有发票怎么做账
  • 员工出差车费如何报销
  • 月初缴纳的保险是当月的吗
  • 计提成本会计分录怎么做
  • 法人代表领工资怎么领
  • 不交增值税就不交企业所得税吗
  • 增值税17%和13%有什么区别
  • 建材公司将自产产品卖出
  • 企业预缴所得税
  • 预计产品质量保证损失是什么意思
  • 期初未缴税额和期末未缴税额
  • 收到负数购入发票怎么办
  • 进项税转出怎么填报表
  • 栗耳簇舌巨嘴鸟,巴西潘塔纳尔保护区里 (© Ana Gram/Shutterstock)
  • 失业保险稳岗补贴是给个人的还是给企业的
  • 用约当产量法怎么计算约当总产量
  • 查看redis节点
  • jsp使用教程
  • carplcy车载有什么用
  • 怎么搭建本地ota
  • 一次性伤残就业补助金
  • 所得税汇算清缴时间期限
  • 直接转销法能不能用
  • 新注册企业实收资本没到账怎么处理
  • 网上变更财务负责人
  • 支付网银年服务费
  • 待认证进项税额是二级科目还是三级科目
  • 保函被索赔支付什么意思
  • sqlserver2008还原数据库 错误3624
  • 出口产品报关多少天
  • 个人独资企业法主要内容
  • 工资单应该盖什么章
  • 事业单位收到专票的风险
  • 应交企业所得税是什么科目
  • 房产税的纳税义务人是征税范围内房屋产权所有人
  • 银行承兑汇票和银行汇票的区别
  • 信用卡刷卡手续费是谁收取的
  • 购买的活动板房可以退吗
  • 资金紧张怎么说
  • 销售方会计分录
  • 劳务费如何计提
  • 预收款退还如何处理
  • 暂估入账后费用怎么做账
  • sql的数据操作
  • .NET Framework SQL Server 数据提供程序连接池
  • xp系统经常未响应怎么办
  • linux实用技巧
  • 在linux系统中安装软件
  • linux图片编辑软件
  • win7诊断策略服务未运行是电脑问题还是网络
  • linux系统文件系统只读
  • win7总是弹出广告怎么办
  • xp无法启动如何修复
  • Linux 修改文件名后缀
  • win7待机时间在哪调
  • 清除文件内容 linux
  • freebsd连接wifi
  • linux操作系统网课
  • 使用JQuery FancyBox插件实现图片展示特效
  • 项目总结之触摸问题分析
  • nodejs v8
  • 一波JavaScript日期判断脚本分享
  • android FileNotFoundException(Is a Directory)解决办法
  • Android屏幕适配分屏
  • 如何查询车辆购买的保险
  • 普通发票开具系统
  • 从事农业种植是干什么的
  • 国有企业全面改革方案
  • 我国为什么不推行安乐死
  • 平安车险如何开票报销
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设