zoukankan      html  css  js  c++  java
  • php采集

    采集思路  

         采集程序的思路很简单大体可以分为以下几个步骤:

    1. 获取远程文件源代码(file_get_contents或用fopen).

         2.分析代码得到自己想要的内容(这里用正则匹配,一般是得到分页)。

         3.跟根得到的内容进行下载入库等操作。

        在这里第二步有可能要重复的操作好几次,比如说要先分析一下分页地址,在分析一下内页的内容才能取得我们想要的东西。

    复制代码
    复制代码
    <?php
    /****获取远程文件源代码常用三种方法***/
    /***方法一、 fopen(),stream_context_create()方法****/
    $opts = array(
      'http'=>array(
        'method'=>"GET",
        'header'=>"Accept-language: en " .
                  "Cookie: foo=bar "
      )
    );
    $context = stream_context_create($opts);
    $fp = fopen('http://www.example.com', 'r', false, $context);
    fpassthru($fp);
    fclose($fp);

    /******方法二、 socket*******/
    function get_content_by_socket($url, $host){
        $fp = fsockopen($host, 80) or die("Open ". $url ." failed");
        $header = "GET /".$url ." HTTP/1.1 ";
        $header .= "Accept: */* ";
        $header .= "Accept-Language: zh-cn ";
        $header .= "Accept-Encoding: gzip, deflate ";
        $header .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; InfoPath.1; .NET CLR 2.0.50727) ";
        $header .= "Host: ". $host ." ";
        $header .= "Connection: Keep-Alive ";
        //$header .= "Cookie: cnzz02=2; rtime=1; ltime=1148456424859; cnzz_eid=56601755- ";
        $header .= "Connection: Close ";
        fwrite($fp, $header);
        while (!feof($fp)) {
            $contents .= fgets($fp, 8192);
        }
        fclose($fp);
        return $contents;
    }

    /******方法三、file_get_contents (),stream_context_create() 方法三********/
    $opts = array(
            'http'=>array(
            'method'=>"GET",
            'header'=>"Content-Type: text/html; charset=utf-8" 
                )
            );        
    $context = stream_context_create($opts);        
    $file = file_get_contents('http://www.sohu.com/', false, $context);        

    /******方法四、 PHP的cURL http://www.chinaz.com/program/2010/0119/104346.shtml*******/
    $ch = curl_init();
    // 2. 设置选项,包括URL
    curl_setopt($ch, CURLOPT_URL, "http://www.sohu.com");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch,CURLOPT_HTTPHEADER,array ("Content-Type: text/xml; charset=utf-8","Expect: 100-continue"));
    // 3. 执行并获取HTML文档内容
    $output = curl_exec($ch);
    var_dump($output);
    // 4. 释放curl句柄
    curl_close($ch);

    /*注意
    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扩展。
    */
    ?>

    复制代码
    复制代码

    采集范例程序

    复制代码
    复制代码
    /*一个图片下载函数*/
    function getimg($url,$filename){
        /*判断图片的url是否为空,如果为空停止函数*/
        if($url==""){
            return false;
        }
        /*取得图片的扩展名,存入变量$ext中*/
        $ext=strrchr($url,".");
        /*判断是否是合法的图片文件*/
      if($ext!=".gif" && $ext!=".jpg"){
            return false;
        }
        /*读取图片*/
        $img=file_get_contents($url);
        /*打开指定的文件*/
        $fp=@fopen($filename.$ext,"a");
        /*写入图片到指点的文件*/
        fwrite($fp,$img);
        /*关闭文件*/
        fclose($fp);
        /*返回图片的新文件名*/
        return $filename.$ext;
    }
    复制代码
    复制代码
    采集图片php程序
    View Code

     除了以上方法还可以用Snoopy,也不错。

    Snoopy是什么? (下载snoopy
     
    Snoopy是一个php类,用来模仿web浏览器的功能,它能完成获取网页内容和发送表单的任务。
     
    Snoopy的一些特点:
     
    * 方便抓取网页的内容
     
    * 方便抓取网页的文本内容 (去除HTML标签)
     
    * 方便抓取网页的链接
     
    * 支持代理主机
     
    * 支持基本的用户名/密码验证
     
    * 支持设置 user_agent, referer(来路), cookies 和 header content(头文件)
     
    * 支持浏览器转向,并能控制转向深度
     
    * 能把网页中的链接扩展成高质量的url(默认)
     
    * 方便提交数据并且获取返回值
     
    * 支持跟踪HTML框架(v0.92增加)
     
    * 支持再转向的时候传递cookies (v0.92增加)
  • 相关阅读:
    Linux系统模拟端口开放程序port 软件的基本使用
    Docker19.03.13离线安装-Docker根目录-Docker常用操作--NVIDIA Docker
    springboot项目启动与停止命令
    两种设备选型的主要性能指标
    docker nginx配置
    使用shell+java 抓取NHK广播
    小程序的测试方法
    adb logcat 查看Android APP日志
    IE11判断是否全是中文的时候无效写法
    C#控制器微信通过encryptedData,iv,Code获取用户信息
  • 原文地址:https://www.cnblogs.com/honeynm/p/4125717.html
Copyright © 2011-2022 走看看