最新公告
  • 欢迎您光临波比源码,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • php file_get_contents数据采集与常用见问题解决

    在批量的数据采集在php中很少会使用file_get_contents函数来操作,但是如果是小量的我们可以使用file_get_contents函数操作,因为它不但好用而且简单易学,下面我来介绍file_get_contents用法与使用过程中的问题解决办法。

    先来看问题,file_get_contents不能获取带端口的网址,例如如下代码:

    file_get_contents('http://localhost:12345');

    没有任何获取,解决方法是:关闭selinux

    1 永久方法 – 需要重启服务器

    修改/etc/selinux/config文件中设置SELINUX=disabled ,然后重启服务器。

    2 临时方法 – 设置系统参数

    使用命令setenforce 0附:

    setenforce 1 设置SELinux 成为enforcing模式

    setenforce 0 设置SELinux 成为permissive模式

    file_get_contents超时,代码如下:

    1. function _file_get_contents($url
    2.   $context = stream_context_create(array
    3.      'http' => array
    4.       'timeout' => 180 //超时时间,单位为秒 
    5.      )  
    6.   ));   
    7.   return @file_get_contents($url, 0, $context); 

    好了上面的问题得到解决之后我们可以开始采集了,代码如下:

    1. <?php  
    2. //全国,判断条件是$REQUEST_URI是否含有html  
    3. if (!strpos($_SERVER["REQUEST_URI"],".html"))  
    4. {  
    5. $page="http://qq.ip138.com/weather/";  
    6. $html = file_get_contents($page,'r');  
    7. $pattern="/<B>全国主要城市、县当天和未来五天天气趋势预报在线查询</B>(.*?)<center style="padding:3px">/si";  
    8. //正则匹配之间的html  
    9. preg_match($pattern,$html,$pg);  
    10. echo "";  
    11. //正则替换远程地址为本地地址  
    12. $p=preg_replace('//weather/(w+)/index.htm/''tq.php/$1.html'$pg[1]);  
    13. echo $p;  
    14. }  
    15. //省,判断条件是$REQUEST_URI是否含有?  
    16. else if(!strpos($_SERVER["REQUEST_URI"],"?")){  
    17. //yoyo推荐的使用分割获得数据,这里是获得省份名称  
    18. $province=explode("/",$_SERVER["REQUEST_URI"]);  
    19. $province=explode(".",$province[count($province)-1]);  
    20. $province=$province[0];  
    21. //被注释掉的是我自己写出来的正则,感觉写的不好,但效果等同上面  
    22. //preg_match('/[^/]+[.(html)]$/',$_SERVER["REQUEST_URI"],$pro);  
    23. //$province=preg_replace('/.html/','',$pro[0]);  
    24. $page="http://qq.ip138.com/weather/".$province."/index.htm";  
    25. //获取html数据之前先尝试打开页面,防止恶意输入地址导致出错  
    26. if (!@fopen($page"r")) {  
    27. die("对不起,该地址不存在!<a href=javascript:history.back(1)>点击这里返回</a>");  
    28. exit(0);  
    29. }  
    30. $html = file_get_contents($page,'r');  
    31. $pattern="/五天天气趋势预报</B>(.*?)请输入输入市/si";  
    32. preg_match($pattern,$html,$pg);  
    33. echo "";  
    34. //正则替换,获取省份,城市  
    35. $p=preg_replace('//weather/(w+)/(w+).htm/''$2.html?pro=$1'$pg[1]);  
    36. echo $p;  
    37. }  
    38. else {  
    39. //市,通过get传递省份  
    40. $pro=$_REQUEST['pro'];  
    41. $city=explode("/",$_SERVER["REQUEST_URI"]);  
    42. $city=explode(".",$city[count($city)-1]);  
    43. $city=$city[0];  
    44. //preg_match('/[^/]+[.(html)]+[?]/',$_SERVER["REQUEST_URI"],$cit);  
    45. //$city=preg_replace('/.html?/','',$cit[0]);  
    46. $page="http://qq.ip138.com/weather/".$pro."/".$city.".htm";  
    47. if (!@fopen($page"r")) {  
    48. die("对不起,该地址不存在!<a href=javascript:history.back(1)>点击这里返回</a>");  
    49. exit(0);  
    50. }  
    51. $html = file_get_contents($page,'r');  
    52. $pattern="/五天天气趋势预报</B>(.*?)请输入输入市/si";  
    53. preg_match($pattern,$html,$pg);  
    54. echo "";  
    55. //获取真实的图片地址  
    56. $p=preg_replace('//image//''http://qq.ip138.com/image/'$pg[1]);  
    57. echo $p;  
    58. }  
    59. ?> 

    如果上面办法无法采集到数据我们可以使用以下代码来处理,代码如下:

    1. <?php  
    2. $url = "http://www.phpfensi.com";  
    3. $ch = curl_init();  
    4. $timeout = 5;  
    5. curl_setopt($ch, CURLOPT_URL, $url);  
    6. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
    7. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);  
    8. //在需要用户检测的网页里需要增加下面两行  
    9. //curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);  
    10. //curl_setopt($ch, CURLOPT_USERPWD, US_NAME.":".US_PWD);  
    11. $contents = curl_exec($ch);  
    12. curl_close($ch);  
    13. echo $contents;  
    14. ?> 
    波比源码 – 精品源码模版分享 | www.bobi11.com
    1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
    2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
    3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
    4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
    5. 如有链接无法下载、失效或广告,请联系管理员处理!
    6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
    7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

    波比源码 » php file_get_contents数据采集与常用见问题解决

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    波比源码
    一个高级程序员模板开发平台
    升级波友尊享更多特权立即升级