已经连着说了好几天的vim了,今天周末给大家很枯燥的讲了vim编辑器了,今天给大家放松一下,让我们来一起研究研究PHP怎么做爬虫,虽说php不如当先流行的python和java有现成的工具包,
已经连着说了好几天的vim了,今天周末给大家很枯燥的讲了vim编辑器了,今天给大家放松一下,让我们来一起研究研究PHP怎么做爬虫,虽说php不如当先流行的python和java有现成的工具包,但是这不代表PHP不可以做爬虫!下面开始!
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); //获取表单
这个我也是在研究阶段,大家可以没事的时候研究研究。好了最后祝大家周末愉快吧,马上中秋了我依然也会持续更新的。