加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_郴州站长网 (http://www.0735zz.com/)- 云通信、区块链、物联设备、云计算、站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

一文介绍使用PHP编写爬虫的方法

发布时间:2022-07-12 12:58:13 所属栏目:PHP教程 来源:互联网
导读:说到爬虫,大家的第一印象就会想到Python, 但是Python并不是所有人都会的, 那么是否可以使用其他的语言来编写爬虫呢? 当然是可以的,下面介绍一下如何使用PHP编写爬虫。 获取页面html内容 1、使用函数 file_get_contents 把整个文件读入一个字符串中。 fi
  说到爬虫,大家的第一印象就会想到Python, 但是Python并不是所有人都会的, 那么是否可以使用其他的语言来编写爬虫呢? 当然是可以的,下面介绍一下如何使用PHP编写爬虫。
  获取页面html内容
 
  1、使用函数 file_get_contents 把整个文件读入一个字符串中。
 
 
 
  file_get_contents(path,include_path,context,start,max_length);
 
  file_get_contents('https://fengkui.net/');
 
  这样就可以将整个页面的html内容,读入一个字符串中,然后进行解析了
 
  2、使用CURL进行请求,获取html
 
 
  
 
 
  /**
 
   * [curlHtml 获取页面信息]
 
   * @param  [type] $url [网址]
 
   * @return [type]      [description]
 
   */
 
  function curlHtml($url)
 
  {
 
      $curl = curl_init();
 
      curl_setopt_array($curl, array(
 
          CURLOPT_URL            => "{$url}",
 
          CURLOPT_RETURNTRANSFER => true,
 
          CURLOPT_ENCODING       => "",
 
          CURLOPT_MAXREDIRS      => 10,
 
          CURLOPT_TIMEOUT        => 30,
 
          CURLOPT_HTTP_VERSION   => CURL_HTTP_VERSION_1_1,
 
          CURLOPT_CUSTOMREQUEST  => "GET",
 
          CURLOPT_HTTPHEADER     => array(
 
              "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
 
              "Accept-Encoding: gzip, deflate, br",
 
              "Accept-Language: zh-CN,zh;q=0.9",
 
              "Cache-Control: no-cache",
 
              "Connection: keep-alive",
 
              "Pragma: no-cache",
 
              "Upgrade-Insecure-Requests: 1",
 
              "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36",
 
              "cache-control: no-cache"
 
          ),
 
      ));
 
      curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
 
      curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
 
      $response = curl_exec($curl);
 
      $err = curl_error($curl);
 
      curl_close($curl);
 
      if ($err) return false;
 
      else return $response;
 
  }
 
  使用Curl我们可以来进行其他操作,如模拟浏览器模拟登陆等一些高级操作。
 
  解析页面HTML,获取所需数据
 
  1、正则获取内容
  
 
 
  /**
 
   * [get_tag_data 使用正则获取html内容]
 
   * @param  [type] $html  [爬取的页面内容]
 
   * @param  [type] $tag   [要查找的标签]
 
   * @param  [type] $attr  [要查找的属性名]
 
   * @param  [type] $value [属性名对应的值]
 
   * @return [type]        [description]
 
   */
 
  function get_tag_data($html,$tag,$attr,$value){
 
      $regex = "/<$tag.*?$attr=".*?$value.*?".*?>(.*?)</$tag>/is";
 
      preg_match_all($regex,$html,$matches,PREG_PATTERN_ORDER);
 
      $data = isset($matches[1][0]) ? $matches[1][0] : '';
 
      return $data;
 
  }
 
  $str = '<div class="feng">冯奎博客</div>';
 
  $value = get_tag_data($str, 'div', 'class', 'feng');
 
  2、使用Xpath解析数据
 
  XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。 具体使用方法及相关介绍查看百度百科(XPath) 使用方法:
 
  
 
  /**
 
   * [get_html_data 使用xpath对获取到的html内容进行处理]
 
   * @param  [type]  $html [爬取的页面内容]
 
   * @param  [type]  $path [Xpath语句]
 
   * @param  integer $tag  [类型 0内容 1标签内容 自定义标签]
 
   * @param  boolean $type [单个 还是多个(默认单个时输出单个)]
 
   * @return [type]        [description]
 
   */
 
  function get_html_data($html,$path,$tag=1,$type=true)
 
  {
 
      $dom = new DOMDocument();
 
      @$dom->loadHTML("<?xml encoding='UTF-8'>" . $html); // 从一个字符串加载HTML并设置UTF8编码
 
      $dom->normalize(); // 使该HTML规范化
 
      $xpath = new DOMXPath($dom); //用DOMXpath加载DOM,用于查询
 
      $contents = $xpath->query($path); // 获取所有内容
 
      $data = [];
 
      foreach ($contents as $value) {
 
          if ($tag==1) {
 
              $data[] = $value->nodeValue; // 获取不带标签内容
 
          } elseif ($tag==2) {
 
              $data[] = $dom->saveHtml($value);  // 获取带标签内容
 
          } else {
 
              $data[] = $value->attributes->getNamedItem($tag)->nodeValue; // 获取attr内容
 
          }
 
      }
 
      if (count($data)==1) {
 
          $data = $data[0];
 
      }
 
      return $data;
 
  }

(编辑:开发网_郴州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读