我用php ,curl主要是抓取数据,当然我们可以用其他的方法来抓取,比如fsockopen,file_get_contents等。但是只能抓那些能直接访问的页面,如果要抓取有页面访问控制的页面,或者是登录以后的页面就比较困难了。
1,抓取无访问控制文件
?php $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, http://localhost/mytest/phpinfo.php curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //如果把这行注释掉的话,就会直接输出 $result=curl_exec($ch); curl_close($ch); ?
2,使用代理进行抓取
为什么要使用代理进行抓取呢?以google为例吧,如果去抓google的数据,短时间内抓的很频繁的话,你就抓取不到了。google对你的ip地址做限制这个时候,你可以换代理重新抓。
?php $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, http://blog.51yip.com curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, TRUE); curl_setopt($ch, CURLOPT_PROXY, 125.21.23.6:8080); //url_setopt($ch, CURLOPT_PROXYUSERPWD, user:password 如果要密码的话,加上这个 $result=curl_exec($ch); curl_close($ch); ?
3,post数据后,抓取数据
单独说一下数据提交数据,因为用 curl的时候,很多时候会有数据交互的,所以比较重要的。
?php $ch = curl_init(); /*在这里需要注意的是,要提交的数据不能是二维数组或者更高 *例如array( name = serialize(array( tank , zhang )), sex = 1, birth = 20101010 ) *例如array( name = array( tank , zhang ), sex = 1, birth = 20101010 )这样会报错的*/ $data = array( name = test , sex = 1, birth = 20101010 curl_setopt($ch, CURLOPT_URL, http://localhost/mytest/curl/upload.php curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_exec($ch); ?
在 upload.php文件中,print_r($_POST);利用curl就能抓取出upload.php输出的内容Array ( [name] = test [sex] = 1 [birth] = 20101010 )
4,抓取一些有页面访问控制的页面
以前写过一篇,页面访问控制的3种方法有兴趣的可以看一下。
如果用上面提到的方法抓的话,会报以下错误:
You are not authorized to view this pageYou do not have permission to view this directory or page using the credentials that you supplied because your Web browser is sending a WWW-Authenticate header field that the Web server is not configured to accept.
这个时候,我们就要用CURLOPT_USERPWD来进行验证了
?php $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, http://club-china /*CURLOPT_USERPWD主要用来破解页面访问控制的 *例如平时我们所以htpasswd产生页面控制等。*/ //curl_setopt($ch, CURLOPT_USERPWD, 231144:2091XTAjmd= curl_setopt($ch, CURLOPT_HTTPGET, 1); curl_setopt($ch, CURLOPT_REFERER, http://club-china curl_setopt($ch, CURLOPT_HEADER, 0); $result=curl_exec($ch); curl_close($ch); ?
5,模拟登录到sina
我们要抓取数据,可能是登录以后的内容,这个时候我们就要用到curl的模拟登录功能了。
?php function checklogin( $user, $password ) if ( emptyempty( $user ) || emptyempty( $password ) ) return 0; $ch = curl_init( ); curl_setopt( $ch, CURLOPT_REFERER, http://mail.sina.com.cn/index.html ); curl_setopt( $ch, CURLOPT_HEADER, true ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_USERAGENT, USERAGENT ); curl_setopt( $ch, CURLOPT_COOKIEJAR, COOKIEJAR ); curl_setopt( $ch, CURLOPT_TIMEOUT, TIMEOUT ); curl_setopt( $ch, CURLOPT_URL, http://mail.sina.com.cn/cgi-bin/login.cgi ); curl_setopt( $ch, CURLOPT_POST, true ); curl_setopt( $ch, CURLOPT_POSTFIELDS, logintype=uid u= .urlencode( $user ). psw= .$password ); $contents = curl_exec( $ch ); curl_close( $ch ); if ( !preg_match( /Location: (.*)///cgi///index//.php//?check_time=(.*)/n/ , $contents, $matches ) ) return 0; }else{ return 1; define( USERAGENT , $_SERVER[ HTTP_USER_AGENT ] ); define( COOKIEJAR , tempnam( /tmp , cookie ) ); define( TIMEOUT , 500 ); echo checklogin( zhangying215 , xtaj227 ?
以上就是php curl中常用的5个代码示例介绍的详细内容,PHP教程
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。
新闻热点
疑难解答