PHP 爬取网页的主要方法


Posted in PHP onJuly 13, 2018

主要流程就是获取整个网页,然后正则匹配(关键的)。

PHP抓取页面的主要方法,有几种方法是网上前辈的经验,现在还没有用到的,先存下来以后试试。

1.file()函数

2.file_get_contents()函数

3.fopen()->fread()->fclose()模式

4.curl方式 (本人主要用这个)

5.fsockopen()函数 socket模式

6.插件(如:http://sourceforge.net/projects/snoopy/)

7.file()函数

<?php
//定义url
$url='[http://t.qq.com](http://t.qq.com/)';//fiel函数读取内容数组
$lines_array=file($url);//拆分数组为字符串
$lines_string=implode('',$lines_array);//输出内容
echo $lines_string; 

2.使用file_get_contents方法实现,比较简单。

使用file_get_contents和fopen必须空间开启allow_url_fopen。方法:编辑php.ini,设置 allow_url_fopen = On,allow_url_fopen关闭时fopen和file_get_contents都不能打开远程文件。

$url="[http://news.sina.com.cn/c/nd/2016-10-23/doc-ifxwztru6951143.shtml](http://news.sina.com.cn/c/nd/2016-10-23/doc-ifxwztru6951143.shtml)";
$html=file_get_contents($url);
//如果出现中文乱码使用下面代码`
//$getcontent = iconv("gb2312", "utf-8",$html);
echo"<textarea style='width:800px;height:600px;'>".$html."</textarea>";

3.fopen()->fread()->fclose()模式 ,目前还没用过,看到了就先记下了

<?php
//定义url
$url='[http://t.qq.com](http://t.qq.com/)';//fopen以二进制方式打开 
$handle=fopen($url,"rb");//变量初始化
$lines_string="";//循环读取数据
do{
$data=fread($handle,1024);  
if(strlen($data)==0) {`
break; 
} 
$lines_string.=$data;
}while(true);//关闭fopen句柄,释放资源
fclose($handle);//输出内容
echo $lines_string;

4.使用curl实现(本人一般使用这个)。

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

<?php
header("Content-Type: text/html;charset=utf-8");
date_default_timezone_set('PRC');
$url = "https://***********ycare";//要爬取的网址
$res = curl_get_contents($url);//curl封装方法
preg_match_all('/<script>(.*?)<\/script>/',$res,$arr_all);//这个网页中数据通过js包过来,所以直接抓js就可以
preg_match_all('/"id"\:"(.*?)",/',$arr_all[1][1],$arr1);//从js块中匹配要的数据
$list = array_unique($arr1[1]);//(可省)保证不重复
//以下则是同理,循环则可
for($i=0;$i<=6;$i=$i+2){
  $detail_url = 'ht*****em/'.$list[$i];
  $detail_res = curl_get_contents($detail_url);
  preg_match_all('/<script>(.*?)<\/script>/',$detail_res,$arr_detail);
  preg_match('/"desc"\:"(.*?)",/',$arr_detail[1][1],$arr_content);
  ***
    ***
    ***
  $ret=curl_post('http://**********cms.php',$result);//此脚本未放在服务器上,原因大家懂就好哈。
}
function curl_get_contents($url,$cookie='',$referer='',$timeout=300,$ishead=0) {
  $curl = curl_init();
  curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);
  curl_setopt($curl, CURLOPT_FOLLOWLOCATION,1);
  curl_setopt($curl, CURLOPT_URL,$url);
  curl_setopt($curl, CURLOPT_TIMEOUT,$timeout);
  curl_setopt($curl, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36');
  if($cookie)
  {
    curl_setopt( $curl, CURLOPT_COOKIE,$cookie);
  }
  if($referer)
  {
    curl_setopt ($curl,CURLOPT_REFERER,$referer);
  }
  $ssl = substr($url, 0, 8) == "https://" ? TRUE : FALSE;
  if ($ssl)
  {
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
  }
  $res = curl_exec($curl);
  return $res;
  curl_close($curl);
}
//curl post数据到服务器
function curl_post($url,$data){
  $ch = curl_init();
  curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
  //curl_setopt($ch,CURLOPT_FOLLOWLOCATION, 1);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36');
  curl_setopt($ch,CURLOPT_URL,$url);
  curl_setopt($ch,CURLOPT_POST,true);
  curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
  $output = curl_exec($ch);
  curl_close($ch);
  return $output; 
}
?>

5.fsockopen()函数 socket模式(没用过,以后可以试试)

socket模式能否正确执行,也跟服务器的设置有关系,具体可以通过phpinfo查看服务器开启了哪些通信协议

<?php
$fp = fsockopen("t.qq.com", 80, $errno, $errstr, 30);
if (!$fp) {
  echo "$errstr ($errno)<br />\n";
} else {
  $out = "GET / HTTP/1.1\r\n";
  $out .= "Host: t.qq.com\r\n";
  $out .= "Connection: Close\r\n\r\n";
  fwrite($fp, $out);
  while (!feof($fp)) {
    echo fgets($fp, 128);
  }
  fclose($fp);
}

6.snoopy插件,最新版本是Snoopy-1.2.4.zip Last Update: 2013-05-30,推荐大家使用

使用网上非常流行的snoopy来进行采集,这是一个非常强大的采集插件,并且它的使用非常方便,你也可以在里面设置agent来模拟浏览器信息。

说明:设置agent是在 Snoopy.class.php 文件的第45行,请在该文件中搜索 “var 公式输入有误_SERVER['HTTP_USER_AGENT']; 可以得到浏览器信息,将echo出来的内容复制到agent里面就可以了。

<?php
//引入snoopy的类文件
require('Snoopy.class.php');
//初始化snoopy类
$snoopy=new Snoopy;
$url="[http://t.qq.com](http://t.qq.com/)";
//开始采集内容`
$snoopy->fetch($url);
//保存采集内容到$lines_string
$lines_string=$snoopy->results;
//输出内容,嘿嘿,大家也可以保存在自己的服务器上
echo $lines_string;

总结

以上所述是小编给大家介绍的PHP 爬取网页的主要方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
一次编写,随处运行
Oct 09 PHP
php的字符串用法小结
Jun 08 PHP
php 中文字符串首字母的获取函数分享
Nov 04 PHP
php以fastCGI的方式运行时文件系统权限问题及解决方法
May 11 PHP
分享php分页的功能模块
Jun 16 PHP
PHP aes (ecb)解密后乱码问题
Jun 22 PHP
PHP使用redis实现统计缓存mysql压力的方法
Nov 14 PHP
PHP类型约束用法示例
Sep 28 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
Aug 31 PHP
PHP+Session防止表单重复提交的解决方法
Apr 09 PHP
PHP实现微信退款功能
Oct 02 PHP
如何用Laravel包含你自己的帮助函数
May 27 PHP
php实现微信发红包功能
Jul 13 #PHP
Yii2框架redis基本应用示例
Jul 13 #PHP
Yii2框架实现登陆添加验证码功能示例
Jul 12 #PHP
Yii框架日志记录Logging操作示例
Jul 12 #PHP
php unlink()函数使用教程
Jul 12 #PHP
总结PHP代码规范、流程规范、git规范
Jun 18 #PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
Jun 16 #PHP
You might like
有关JSON以及JSON在PHP中的应用
2010/04/09 PHP
PHP 命名空间实例说明
2011/01/27 PHP
PHP学习之正则表达式
2011/04/17 PHP
深入理解PHP中的count函数
2016/05/31 PHP
PHP利用正则表达式将相对路径转成绝对路径的方法示例
2017/02/28 PHP
PHP查询分页的实现代码
2017/06/09 PHP
对laravel in 查询的使用方法详解
2019/10/09 PHP
菜鸟javascript基础资料整理3 正则
2010/12/06 Javascript
关于js遍历表格的实例
2013/07/10 Javascript
JavaScript中的apply和call函数详解
2014/07/20 Javascript
jQuery动态背景图片效果实现方法
2015/07/03 Javascript
IE9+已经不对document.createElement向下兼容的解决方法
2015/09/14 Javascript
基于jQuery实现复选框是否选中进行答题提示
2015/12/10 Javascript
Jquery鼠标放上去显示全名的实现方法
2017/02/06 Javascript
javascript 中的继承实例详解
2017/05/05 Javascript
超级简易的JS计算器实例讲解(实现加减乘除)
2017/08/08 Javascript
jQuery动态添加元素无法触发绑定事件的解决方法分析
2018/01/02 jQuery
jquery应用实例分享_实现手风琴特效
2018/02/01 jQuery
vue多页面开发和打包正确处理方法
2018/04/20 Javascript
浅谈如何通过node.js对数据进行MD5加密
2018/05/16 Javascript
JS实现马赛克图片效果完整示例
2019/04/13 Javascript
利用es6 new.target来对模拟抽象类的方法
2019/05/10 Javascript
JavaScript HTML DOM元素 节点操作汇总
2019/07/29 Javascript
微信小程序 scroll-view 实现锚点跳转功能
2019/12/12 Javascript
Python基础之函数用法实例详解
2014/09/10 Python
Python的Twisted框架上手前所必须了解的异步编程思想
2016/05/25 Python
python使用电子邮件模块smtplib的方法
2016/08/28 Python
Pandas 数据处理,数据清洗详解
2018/07/10 Python
python3实现单目标粒子群算法
2019/11/14 Python
复化梯形求积分实例——用Python进行数值计算
2019/11/20 Python
PyCharm Anaconda配置PyQt5开发环境及创建项目的教程详解
2020/03/24 Python
CSS3常用的几种颜色渐变模式总结
2016/11/18 HTML / CSS
2014年信访维稳工作总结
2014/12/08 职场文书
幸福家庭事迹材料
2014/12/20 职场文书
2014年教研员工作总结
2014/12/23 职场文书
结婚堵门保证书
2015/05/08 职场文书