设为首页 收藏本站
查看: 702|回复: 0

[经验分享] PHP 爬虫 两篇转载

[复制链接]

尚未签到

发表于 2017-3-28 10:13:37 | 显示全部楼层 |阅读模式
  http://hi.baidu.com/xiaojiang/item/774af38966cf44ca98255ff0

<?php
classCurlComponent{
var $headers;
var $user_agent;
var $compression;
var $cookie_file;
var $proxy;
functionset_value($cookies=TRUE,$cookie='cookies.txt',$compression='gzip',$proxy='') {
$this->headers[] = "Accept: image/gif, image/x-bitmap, image/jpeg, image/pjpeg";
$this->headers[] = "Connection: Keep-Alive";
$this->headers[] = "Content-type: application/x-www-form-urlencoded";
$this->user_agent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0)";
$this->compression=$compression;
$this->proxy=$proxy;
$this->cookies=$cookies;
if ($this->cookies == TRUE) $this->cookie($cookie);
}
functioncookie($cookie_file) {
if (file_exists($cookie_file)) {
$this->cookie_file=$cookie_file;
} else {
@fopen($cookie_file,'w')or$this->error("The cookie file could not be opened. Make sure this directory has the correct permissions");
$this->cookie_file=$cookie_file;
@fclose($cookie_file);
}
}
functionget($url,$refer='') {
$process =curl_init($url);
curl_setopt($process,CURLOPT_REFERER, $refer);
curl_setopt($process,CURLOPT_HTTPHEADER, $this->headers);
curl_setopt($process,CURLOPT_USERAGENT, $this->user_agent);
if ($this->cookies == TRUE)curl_setopt($process,CURLOPT_COOKIEFILE, $this->cookie_file);
if ($this->cookies == TRUE)curl_setopt($process,CURLOPT_COOKIEJAR, $this->cookie_file);
curl_setopt($process,CURLOPT_ENCODING, $this->compression);
curl_setopt($process,CURLOPT_TIMEOUT, 30000);
if ($this->proxy)curl_setopt($cUrl,CURLOPT_PROXY, 'proxy_ip:proxy_port');
curl_setopt($process,CURLOPT_RETURNTRANSFER, 1);
$return =curl_exec($process);
curl_close($process);
return $return;
}
functionpost($url,$data,$refer) {
$process =curl_init($url);
curl_setopt($process,CURLOPT_REFERER, $refer);
curl_setopt($process,CURLOPT_HTTPHEADER, $this->headers);
curl_setopt($process,CURLOPT_USERAGENT, $this->user_agent);
if ($this->cookies == TRUE)curl_setopt($process,CURLOPT_COOKIEFILE, $this->cookie_file);
if ($this->cookies == TRUE)curl_setopt($process,CURLOPT_COOKIEJAR, $this->cookie_file);
curl_setopt($process,CURLOPT_ENCODING, $this->compression);
curl_setopt($process,CURLOPT_TIMEOUT, 30000);
if ($this->proxy)curl_setopt($cUrl,CURLOPT_PROXY, 'proxy_ip:proxy_port');
curl_setopt($process,CURLOPT_POSTFIELDS, $data);
curl_setopt($process,CURLOPT_RETURNTRANSFER, 1);
curl_setopt($process,CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($process,CURLOPT_POST, 1);
$return =curl_exec($process);
curl_close($process);
return $return;
}
functionerror($error) {
echo "<center><div style='width:500px;border: 3px solid #FFEEFF; padding: 3px; background-color: #FFDDFF;font-family: verdana; font-size: 10px'><b>cURL Error</b><br>$error</div></center>";
die;
}
}
?>
  

  


http://www.hdj.me/get-cookie-without-cookiejar-by-curl


PHP中CURL类是一个非常牛逼的工具类,具体怎么牛逼就不啰嗦了。

对于COOKIE,CURL类也有很不错的支持,但不够灵活,并未能通过现成的方法以变量的方法获取到,而以要通过以下方法实现。


// 把COOKIE保存至cookie.txt
curl_setopt($ch, CURLOPT_COOKIEFILE,'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEJAR,'cookie.txt');






先把COOKIE保存文件,调用的时候还得读取文件,这样意味着两次的IO操作,效率如何,不用说大家都清楚了。

那么有没有办法可以绕过写读文件呢?不卖关子,直接上代码:




// 初始化CURL
$ch= curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
// 获取头部信息
curl_setopt($ch, CURLOPT_HEADER, 1);
// 返回原生的(Raw)输出
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 执行并获取返回结果
$content= curl_exec($ch);
// 关闭CURL
curl_close($ch);
// 解析HTTP数据流
list($header,$body) =explode("\r\n\r\n",$content);
// 解析COOKIE
preg_match("/set\-cookie:([^\r\n]*)/i",$header,$matches);
// 后面用CURL提交的时候可以直接使用
// curl_setopt($ch, CURLOPT_COOKIE, $cookie);
$cookie= $matches[1];








打完收工!欢迎大家来喷!



  

  

  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-356268-1-1.html 上篇帖子: 修改一些PHP工具 下篇帖子: PHP获得前一个/当前页面的URL地址
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表