2019独角兽企业重金招聘Python工程师标准>>>

function contentCollection($url){$data = array('list'=>null,'status'=>0);if(!$url){$data['info'] = '请传入采集地址';return $data;}if(!preg_match("/^http/", $url)){$url = 'http://'.$url;}preg_match("/^http(s)?:\/\/[^\/]+/", $url, $host_ary);$start = microtime(true);$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);//将curl_exec()获取的信息以字符串返回,而不是直接输出。curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);//TRUE 强制获取一个新的连接,而不是缓存中的连接。//curl_setopt($ch, CURLOPT_FTPAPPEND, true);//为追加写入文件,而不是覆盖。curl_setopt($ch, CURLOPT_FAILONERROR, true);//当 HTTP 状态码大于等于 400,TRUE 将将显示错误详情。默认情况下将返回页面,忽略 HTTP 代码。curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B137 Safari/601.1');//设置UAcurl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);//在尝试连接时等待的秒数。设置为0,则无限等待。//设置最大跳转次数$redirects = 5;if (!ini_get('open_basedir') && !ini_get('safe_mode')) {curl_setopt($ch, CURLOPT_HEADER, false);curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);//302重定向curl_setopt($ch, CURLOPT_MAXREDIRS, $redirects);$content = curl_exec($ch);} else {curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);curl_setopt($ch, CURLOPT_HEADER, true);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_FORBID_REUSE, false);do {$content = curl_exec($ch);if (curl_errno($ch))break;$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);if ($code != 301 && $code != 302)break;$header_start = strpos($content, "\r\n")+2;$headers = substr($content, $header_start, strpos($content, "\r\n\r\n", $header_start)+2-$header_start);if (!preg_match("!\r\n(?:Location|URI): *(.*?) *\r\n!", $headers, $matches))break;curl_setopt($ch, CURLOPT_URL, $matches[1]);} while (--$redirects);if (!$redirects){$data['info'] = '重定向次数太多。';return $data;}}$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);// 关闭cURL资源,并且释放系统资源curl_close($ch);if(200 != $http_code){$data['info'] = '采集失败,http_code:'.$http_code;return $data;}$content = preg_replace("/<\!--(.*?)-->/is", '', $content);preg_match_all("/<title[^>]*?>(.*?)<\/title>(.*)<body[^>]*?>(.*?)<\/body>/is", $content, $body,PREG_SET_ORDER);if(!$body[0]){$data['info'] = '没有抓取到内容';return $data;}$title = $body[0][1];$collection_content = $body[0][3];preg_match_all("/<link[^>]*rel=['|\"]stylesheet['|\"][^>]*>/is", $content, $link);$link_str = '';if($link[0]){$link[0] = preg_replace("/(href=['|\"])\//", '${1}'.$host_ary[0].'/', $link[0]);$link_str = implode('',$link[0]);}$collection_content = preg_replace("/(<img[^>]*?src=['|\"])\//", '${1}'.$host_ary[0].'/', $collection_content);$collection_content = $link_str . $collection_content;$data['status'] = 1;$data['info'] = mb_convert_encoding($collection_content, 'utf-8','GBK,UTF-8,ASCII');$data['title'] = $title;return $data;}

转载于:https://my.oschina.net/u/1029242/blog/753132

php curl 内容采集相关推荐

  1. curl多线程采集----评论

    文章<curl多线程采集>的讨论如下 william在 2016 年 3 月 20 日下午 3:21 说道: 我想抓取http://china.nba.com/playerindex/上面 ...

  2. php curl 防止采集,php多线程采集网页的解决办法 curl多线程采集

    一直在使用thinkphp做项目,同样也经常进行采集!而对于物联卡来说,就更要大量的采集运营商提供的API信息,平时使用PHP单线程curl采集多个网页的时候速度特别慢,尤其是采集几十个接口的时候(电 ...

  3. 织梦cms内容采集视频教程

    网站的核心是什么?是内容.虽然说对于seo来说,最好是能够进行伪原创.甚至远程,但是很多站长每天并不一定有太多的的时间来进行内容的创作.于是很多人站长开始想法子进行内容采集从而填充网站的内容.今天就给 ...

  4. 微信小程序:笑话段子手微信小程序源码自带内容采集随时有新内容

    这是一款笑话段子的一款微信小程序源码 内容支持采集而来,所以不需要担心内容的问题 该小程序目前分三个分类,推荐,段子 ,图片 安装方法, 使用微信开发者工具打开源码 然后设置一个合法域名 设置好了以后 ...

  5. QueryList列表内容采集

    QueryList列表内容采集: public function test(){$url = 'https://it.ithome.com';// 元数据采集规则$rules = ['img'=> ...

  6. 做自媒体内容采集有什么套路吗?怎么写出优质的文章?

    在这个互联网的时代,绝大部分的人问我,自媒体好不好做,能赚多少钱,做自媒体内容采集有什么套路存在吗?其实这个问题的答案是不确定的,因为自媒体好不好做,主要还是看你准备怎么做,用你的方法去做自媒体. 现 ...

  7. Python爬虫,微信公众号话题标签内容采集打印PDF输出

    微信公众号内容采集,比较怪异,其参数,post参数需要话费时间去搞定,这里采集的是话题标签的内容,同时应用了pdfkit打印输出内容. 这里实现应用了两个版本,第一个是直接网页访问,其真实地址即pos ...

  8. php抓取html元素内容 采集网页

    网页抓取就像搜索引擎一个可以去自动抓取其它服务器上的内容了,下面我整理的几个php常用做法,大家一起来看看. 抓取某一个网页中的内容,需要对DOM树进行解析,找到指定节点后,再抓取我们需要的内容,过程 ...

  9. 利用PHP制作简单的内容采集器

    利用PHP制作简单的内容采集器 作者:yzxh24    阅读人次:--    文章来源:天极论坛整理    发布时间:2018/4/23    网友评论()条   采集器,通常又叫小偷程序,主要是用 ...

最新文章

  1. Spring MVC入门示例
  2. Oracle啟動模式關閉模式
  3. My story with XJTLU Library
  4. 11张图演进SeviceMesh服务网格
  5. this 的指向问题
  6. linux内核分析第五次实验
  7. MySQL字符串拼接的两种方式
  8. TOM邮箱|选出好用的邮箱让你事半功倍
  9. 2016年江苏省普通高等学校第十三届高等数学竞赛试题(本科一级)讲解
  10. 利用TDR (时域反射计)测量传输延时
  11. 第四届中国软件开源创新大赛通知
  12. 编译原理实验四 语义分析及中间代码生成
  13. Java中如何不用中间变量来使两个变量交换值
  14. 多线程处理Excel导入数据入库
  15. 常见的 ChatGPT 相关错误提示及解决办法
  16. 按TAB键锁定计算机,一按tab键,电脑就关机了!
  17. 使用Ceph作为OpenStack的统一存储解决方案
  18. 高铁专业需不需要用计算机,高铁专业要学什么
  19. PhotoShop自学笔记
  20. vue3前端js通过navigator.serial直接连接地磅仪串口显示重量

热门文章

  1. layer弹出信息框API
  2. 怎样使windows上的javaWEB项目公布到Centos上
  3. 0227windows下模糊查询oracle事件的脚本
  4. oracle lob 简单介绍
  5. swift为UIView添加extension扩展frame
  6. 新建表维护程序SM30
  7. 路由过滤之 Route-map Distribute-list
  8. java gui 颜色从html_Java GUI显示网页并返回HTML
  9. SD-WAN — 技术架构
  10. DPI — nDPI — 安装部署与应用示例