php curl 内容采集
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 内容采集相关推荐
- curl多线程采集----评论
文章<curl多线程采集>的讨论如下 william在 2016 年 3 月 20 日下午 3:21 说道: 我想抓取http://china.nba.com/playerindex/上面 ...
- php curl 防止采集,php多线程采集网页的解决办法 curl多线程采集
一直在使用thinkphp做项目,同样也经常进行采集!而对于物联卡来说,就更要大量的采集运营商提供的API信息,平时使用PHP单线程curl采集多个网页的时候速度特别慢,尤其是采集几十个接口的时候(电 ...
- 织梦cms内容采集视频教程
网站的核心是什么?是内容.虽然说对于seo来说,最好是能够进行伪原创.甚至远程,但是很多站长每天并不一定有太多的的时间来进行内容的创作.于是很多人站长开始想法子进行内容采集从而填充网站的内容.今天就给 ...
- 微信小程序:笑话段子手微信小程序源码自带内容采集随时有新内容
这是一款笑话段子的一款微信小程序源码 内容支持采集而来,所以不需要担心内容的问题 该小程序目前分三个分类,推荐,段子 ,图片 安装方法, 使用微信开发者工具打开源码 然后设置一个合法域名 设置好了以后 ...
- QueryList列表内容采集
QueryList列表内容采集: public function test(){$url = 'https://it.ithome.com';// 元数据采集规则$rules = ['img'=> ...
- 做自媒体内容采集有什么套路吗?怎么写出优质的文章?
在这个互联网的时代,绝大部分的人问我,自媒体好不好做,能赚多少钱,做自媒体内容采集有什么套路存在吗?其实这个问题的答案是不确定的,因为自媒体好不好做,主要还是看你准备怎么做,用你的方法去做自媒体. 现 ...
- Python爬虫,微信公众号话题标签内容采集打印PDF输出
微信公众号内容采集,比较怪异,其参数,post参数需要话费时间去搞定,这里采集的是话题标签的内容,同时应用了pdfkit打印输出内容. 这里实现应用了两个版本,第一个是直接网页访问,其真实地址即pos ...
- php抓取html元素内容 采集网页
网页抓取就像搜索引擎一个可以去自动抓取其它服务器上的内容了,下面我整理的几个php常用做法,大家一起来看看. 抓取某一个网页中的内容,需要对DOM树进行解析,找到指定节点后,再抓取我们需要的内容,过程 ...
- 利用PHP制作简单的内容采集器
利用PHP制作简单的内容采集器 作者:yzxh24 阅读人次:-- 文章来源:天极论坛整理 发布时间:2018/4/23 网友评论()条 采集器,通常又叫小偷程序,主要是用 ...
最新文章
- Spring MVC入门示例
- Oracle啟動模式關閉模式
- My story with XJTLU Library
- 11张图演进SeviceMesh服务网格
- this 的指向问题
- linux内核分析第五次实验
- MySQL字符串拼接的两种方式
- TOM邮箱|选出好用的邮箱让你事半功倍
- 2016年江苏省普通高等学校第十三届高等数学竞赛试题(本科一级)讲解
- 利用TDR (时域反射计)测量传输延时
- 第四届中国软件开源创新大赛通知
- 编译原理实验四 语义分析及中间代码生成
- Java中如何不用中间变量来使两个变量交换值
- 多线程处理Excel导入数据入库
- 常见的 ChatGPT 相关错误提示及解决办法
- 按TAB键锁定计算机,一按tab键,电脑就关机了!
- 使用Ceph作为OpenStack的统一存储解决方案
- 高铁专业需不需要用计算机,高铁专业要学什么
- PhotoShop自学笔记
- vue3前端js通过navigator.serial直接连接地磅仪串口显示重量