LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

php抓取网页数据的技术要点

admin
2013年2月25日 23:46 本文热度 5081




php中一般都是去抓取网页数据?如想把http://mp3.baidu.com/ 歌曲500TOP把抓下来,如何实现?


该文章在 2013/2/25 23:46:42 编辑过

全部评论1

admin
2013年2月25日 23:52

问题中提到需要用PHP实现,个人总结整理了一下,有以下几种常用的用php抓取网页中的内容的方法,供您参考。

1.使用file_get_contents

  
  1. <?php      
  2. $url = "http://www.34ways.com";   
  3. $contents = file_get_contents($url);   
  4. //如果出现中文乱码使用下面代码   
  5. //$getcontent = iconv("gb2312", "utf-8",$contents);    
  6. echo $contents;   
  7. ?>

2.使用curl

  
  1. <?php      
  2. $url = "http://www.34ways.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. ?>

3.使用fopen->fread->fclose

  
  1. <?php      
  2. $handle = fopen ("http://www.34ways.com", "rb");   
  3. $contents = "";   
  4. do {   
  5.    $data = fread($handle, 1024);   
  6.    if (strlen($data) == 0) {   
  7.    break;   
  8.    }   
  9.    $contents .= $data;   
  10. } while(true);   
  11. fclose ($handle);   
  12. echo $contents;   
  13. ?>

最后提醒几点:
1.使用file_get_contents和fopen必须空间开启allow_url_fopen。
方法:

编辑php.ini,设置allow_url_fopen =
On,allow_url_fopen关闭时fopen和file_get_contents都不能打开远程文件。

2.使用curl必须空间开启curl。
方法:

windows下修改php.ini,将extension=php_curl.dll前面的分号去掉,而且需要拷贝ssleay32.dll和libeay32.dll到C:\WINDOWS\system32下;Linux下要安装curl扩展。

 
评论 (1)链接 • 2012-07-10
  • 多谢您的解答~ – 张鹏飞 2012-07-10

先file_get_contents("http://mp3.baidu.com/"),取一个html的结果 然后从html 利用正则找规律 来取

页面只给了ID, 由flash查找的.如果想知道怎么查找的,可以反编译SWF.
有其它的音乐网站列出了baidu的排行榜,也许从那里抓更容易.

只是举了个例子,抓去网页数据无非就两步:1、抓取;2:分析
抓取分几种情况:1、普通字符串,就是普通网页源码,用file_get_contents或curl抓取,2、有序数据如xml,可以用simplexml_load_file抓取
分析:如果是第二种情况,就按照xml数据来遍历处理好了。 如果是第一种情况,用preg_match来匹配目标数据

  • 只说下思路,这样的代码网上太多,就不多说了。
    PHP实现的话,file_get_contents网页内容下来,然后用正则进行分析得到mp3文件地址到一个文件里面,然后用迅雷批量下载。
    PHP下载mp3 - -| 你懂的

    <?php
    /*
    * 如下: 方法有点笨
    * 抓取网页内容用 PHP 的正则
    * 用JS每隔5分钟刷新当前页面---即重新获取网页内容
    *
    * 注: $mode中--<title></title>-更改为所需内容(如 $mode = "#<a(.)</a>#";>获取所有链接) * * window.location.href="http://localhost/baidu/refesh.php";中的http://localhost/baidu/refesh.php * 更改为自己的URL----作用:即刷新当前页面 * * setInterval("ref()",300000);是每隔300000毫秒(即 5 * 60 *1000 毫秒即5分钟)执行一次函数 ref() * * print_r($arr);输出获得的所有内容 $arr是一个数组 可根据所需输出一部分(如 echo $arr[1][0];) * 若要获得所有内容 可去掉 * $mode = "#<title>(.)</title>#";
    if(preg_match_all($mode,$content,$arr)){
    print_r($arr);
    echo "<br/>";
    echo $arr[1][0];
    }
    再加上 echo $content;
    */
    $url = "http://www.baidu.com"; //目标站
    $fp = @fopen($url, "r") or die("超时");

    $content=file_get_contents($url);
    $mode = "#<title>(.*)</title>#";
    if(preg_match_all($mode,$content,$arr)){
    //print_r($arr);
    echo "<br/>";
    echo $arr[0];
    }
    ?>
    <script language="JavaScript" type="text/javascript">
    <--
    function ref(){
    window.location.href="http://localhost/baidu/refesh.php";
    }
    setInterval("ref()",300000);
    //-->
    </script>

    详细汇总 http://blog.163.com/kong_qing_feng/blog/static/186228032009418144099/

     
    关键字查询
    相关文章
    正在查询...
    点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
    点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
    点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
    点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
    Copyright 2010-2024 ClickSun All Rights Reserved