php curl抓取网页数据(学习“两者效率的稳定性问题”的讲解内容简单清晰)

优采云 发布时间: 2021-10-02 14:03

  php curl抓取网页数据(学习“两者效率的稳定性问题”的讲解内容简单清晰)

  本文文章主要讲解《如何解决PHP CURL或file_get_contents的代码获取页面标题的问题以及两者效率的稳定性问题》。文章中的讲解简单明了,易学易懂。请关注下面的编辑。思路慢慢深入,一起来学习学习《如何解决PHP CURL或者file_get_contents的代码获取页面标题的问题以及两者效率的稳定性》!

  推荐的获取CURL的方法

  使用 file_get_contents

  看一下 file_get_contents 性能

  1)fopen/file_get_contents 每次请求远程URL中的数据时,都会再次进行DNS查询,不会缓存DNS信息。但是 CURL 会自动缓存 DNS 信息。请求同域名下的网页或图片,只需要进行一次DNS查询。这大大减少了 DNS 查询的数量。所以CURL的性能要比fopen/file_get_contents好很多。

  2)fopen/file_get_contents 在请求 HTTP 时使用 http_fopen_wrapper,不会保持存活。但是卷曲可以。这样,在多次请求多个链接时,curl 的效率会更高。(应该可以设置标题)

  3)fopen/file_get_contents 函数会受到php.ini 文件中allow_url_open 选项配置的影响。如果配置关闭,则该功能无效。并且 curl 不受此配置的影响。

  4)curl 可以模拟多种请求,如:POST 数据、表单提交等,用户可以根据自己的需求自定义请求。而 fopen/file_get_contents 只能使用 get 来获取数据。

  5)fopen/file_get_contents 无法正确下载二进制文件

  6)fopen/file_get_contents 无法正确处理 ssl 请求

  7)curl 可以利用多线程

  8) 使用file_get_contents时,如果网络有问题,这里很容易积累一些进程

  9)如果要进行连续连接,请多次请求多个页面。那么 file_get_contents 就会出错。获取的内容也可能是错误的。所以在做类似采集的事情的时候,肯定有问题。使用curl进行采集爬取,如果你还不相信,我们再做一个测试。

  curl和file_get_contents PHP源码性能对比如下:

  第182话

  测试访问

  file_get_contents 速度:4.2404510975 秒

  卷曲速度:2.8205530643 秒

  curl 比 file_get_contents 快约 30%,最重要的是,服务器负载更低。

  ps:php函数file_get_contents和curl的效率和稳定性问题

  我习惯使用方便快捷的file_get_contents函数去抓取其他家网站的内容,但是一直遇到获取失败的问题。虽然按照手册中的例子设置了超时时间,但大多数时候并不好用:

  $config['context'] = stream_context_create(array('http' => array('method' => "GET",'timeout' => 5)));

  'timeout' => 5//这个超时时间不稳定,经常难以使用。这时候再看服务器的连接池,会发现一堆类似下面的错误,让你头疼:

  file_get_contents(***): 无法打开流...

  作为最后的手段,我安装了 curl 库并编写了一个函数替换:

  function curl_get_contents($url) 

 $ch = curl_init(); 

 curl_setopt($ch, CURLOPT_URL, $url);   //设置访问的url地址 

 //curl_setopt($ch,CURLOPT_HEADER,1);   //是否显示头部信息 

 curl_setopt($ch, CURLOPT_TIMEOUT, 5);   //设置超时 

 curl_setopt($ch, CURLOPT_USERAGENT, _USERAGENT_); //用户访问代理 User-Agent 

 curl_setopt($ch, CURLOPT_REFERER,_REFERER_);  //设置 referer 

 curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);  //跟踪301 

 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  //返回结果 

 $r = curl_exec($ch); 

 curl_close($ch); 

 return $r; 

}

  这样,除了真正的网络问题外,没有更多的问题。

  这是其他人对 curl 和 file_get_contents 的测试:

  File_get_contents 需要几秒钟才能获取:

  2.31319094

  2.30374217

  2.21512604

  3.30553889

  2.30124092

  curl 使用的时间:

  0.68719101

  0.64675593

  0.64326

  0.81983113

  0.63956594

  感谢您的阅读。以上就是《如何解决PHP CURL或file_get_contents的代码获取页面标题以及两者效率稳定性问题》的内容。看完这篇文章,相信大家都在思考如何解决PHP CURL或者file_get_contents获取页面标题的问题。代码的稳定性问题和两者的效率问题有比较深刻的体会,具体的用法需要大家验证。这就是一宿云。小编会为大家推送更多相关知识点文章,欢迎关注!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线