当前位置 : 主页 > 网络编程 > PHP >

【放松娱乐】周末搞点好玩的,用PHP做爬虫的几种方法

来源:互联网 收集:自由互联 发布时间:2023-10-08
已经连着说了好几天的vim了,今天周末给大家很枯燥的讲了vim编辑器了,今天给大家放松一下,让我们来一起研究研究PHP怎么做爬虫,虽说php不如当先流行的python和java有现成的工具包,

已经连着说了好几天的vim了,今天周末给大家很枯燥的讲了vim编辑器了,今天给大家放松一下,让我们来一起研究研究PHP怎么做爬虫,虽说php不如当先流行的python和java有现成的工具包,但是这不代表PHP不可以做爬虫!下面开始! image.png

PHP中有三种比较常见的方法可以进行做爬虫任务,分别为

  • get+file_get_contents()
  • 利用CURL
  • Snoopy

file_get_contents 该函数是可以把整个web网页当做文件进行读取,后续可以利用正则进行匹配所需要的数据。

file_get_contents(path,incude_path,context,start,max_length)
//path 必需,需要读取的文件
//inculde_path 可选,如果也需要在include_path中寻找的还,可将该参数设为1
//context,可选,文件的句柄环境
//start 可选,规定在文件中开始读取的位置
//max_length 可选。规定读取的字节数

//实例
function GetData1($url){
    $datas=file_get_contents($url);//发送请求,并返回获取到的页面数据
    return $datas;
  }
  $url="https://zhihu.com";
  print_r(GetData1($url));

CURL方式

第二种爬取数据的途径,通过curl库,我们可以向指定的网页发送数据(该网页没有对爬虫的检测机制),当然如果存在也不影响,可以通过curl的函数 curl_setopt($ch,option,value)进行伪装

但是该类型比较适合没有反扒机制的网站,如果有的话我们要伪装请求头。

function DetData2($url){
$ch=curl_init($url);
//中间可以参考curl的各类配置进行设置get/post以及各类请求头进行伪装自己
$datas=curl_exec($ch);
return $datas;
}

//实例
  function GetData2($url){
    $curl=curl_init($url);
    
    curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址  
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查  
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在  
    curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器  
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转  
    curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer  
    curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求  
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的数据包  
    curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环  
    curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容  
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 0); // 获取的信息以文件流的形式返回 
    curl_setopt($curl, CURLOPT_HTTPHEADER, array('Expect:'));
    $tmpInfo = curl_exec($curl); // 执行操作  
    if (curl_errno($curl)) {  
       echo 'Errno'.curl_error($curl);//捕抓异常  
    }
    
    curl_close($curl);
    return $tmpInfo;
  }

$url = "https://zhihu.com";
$result = getData($url);
var_dump($result);

Snoopy

Snoopy,是一个及其强大的库,使用该库是需要下载对应的文件的 地址:https://sourceforge.net/projects/snoopy/files/latest/download ,大家可以直接使用进行操作。

include("Snoopy.php");//使用时不要忘记引入Snoopy类库
function GetData3($url){
      $ch=new Snoopy;//实例化
      $ch->agent = "Mozilla/5.0 (Linux; U; Android 8.1.0; zh-CN; Redmi 6 Pro Build/OPM1.171019.019) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/12.5.5.1035 Mobile Safari/537.36";//设置浏览器环境
      $ch->referer="https://m.ting22.com/ting/1547-180.html";
      $ch->fetch($url);
      return $ch->results;//返回数据
    }

是不是很简单,代码就这么几行,但是这个还有更NB的,这个库可以去掉一些正则规则,它具有自动提取功能的。

$snoopy->fetchtext($url);//获取网页数据的全部文本数据
$snoopy->fetchlinks($url);//获取网页数据的全部链接
$snoopy->fetchform($url); //获取表单

这个我也是在研究阶段,大家可以没事的时候研究研究。好了最后祝大家周末愉快吧,马上中秋了我依然也会持续更新的。

上一篇:使用Python编写自动化脚本完成常见任务
下一篇:没有了
网友评论