我们在开发网络程序时,往往需要抓取非本地文件,一般情况下都是利用php模拟浏览器的访问,通过http请求访问url地址, 然后得到html源代码或者xml数据,得到数据我们不能直接输出,往往需要对内容进行提取,然后再进行格式化,以更加友好的方式显现出来。

下面简单说一下php抓取页面的几种方法及原理:

一、 PHP抓取页面的主要方法:

1. file()函数

2. file_get_contents()函数

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

4.curl方式

5. fsockopen()函数 socket模式

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

二、PHP解析html或xml代码主要方式:

1. file()函数

<?php
//定义url
$url='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都不能打开远程文件。

<?php
//定义url
$url='http://t.qq.com';//file_get_contents函数远程读取数据
$lines_string=file_get_contents($url);//输出内容,嘿嘿,大家也可以保存在自己的服务器上
echo htmlspecialchars($lines_string);

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


<?php
//定义url
$url='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
// 创建一个新cURL资源
$url='http://t.qq.com';
$ch=curl_init();
$timeout=5;
// 设置URL和相应的选项
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
// 抓取URL
$lines_string=curl_exec($ch);
// 关闭cURL资源,并且释放系统资源
curl_close($ch);
//输出内容,嘿嘿,大家也可以保存在自己的服务器上
echo $lines_string;

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来模拟浏览器信息。

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

说明:设置agent是在 Snoopy.class.php 文件的第45行,请在该文件中搜索 “var $agent” (引号中的内容)。浏览器内容你可以使用PHP来获得,
使用 echo $_SERVER['HTTP_USER_AGENT']; 可以得到浏览器信息,将echo出来的内容复制到agent里面就可以了。

PHP抓取页面的几种方式相关推荐

  1. php取整到第一位,php取整的几种方式,四舍五入,舍去法取整,进一法取整

    php取整的几种方式,四舍五入,舍去法取整,进一法取整 方式一:round 对浮点数进行四舍五入 语法:float round ( float val [, int precision] ) echo ...

  2. 系统检测到您正在使用网页抓取工具访问_从网站抓取数据的3种最佳方法

    halo,大家好,我是特仑苏,今天呢给大家分享一些Python从网站抓取数据的一些方法,希望可以给大家带来一些帮助! 原作者:Octoparse团队 原出处:作品文(从网站抓取数据的3种最佳方法)/网 ...

  3. php屏蔽蜘蛛,如何屏蔽垃圾蜘蛛抓取页面

    在服务器日常维护过程中我们经常会发现日志中有很多网络蜘蛛爬取的记录,这些蜘蛛有些是知名的并对网站收录流量有益的,比如百度蜘蛛(Baiduspider),也有不但不遵守robots规则对服务器造成压力, ...

  4. php怎么获取网页内的视频教程,PHP怎样用正则抓取页面中的网址

    前言 链接也就是超级链接,是从一个元素(文字.图片.视频等)链接到另一个元素(文字.图片.视频等).网页中的链接一般有三种,一种是绝对URL超链接,也就是一个页面的完整路径:另一种是相对URL超链接, ...

  5. 爬虫抓取页面数据原理(php爬虫框架有很多 )

    爬虫抓取页面数据原理(php爬虫框架有很多 ) 一.总结 1.php爬虫框架有很多,包括很多傻瓜式的软件 2.照以前写过java爬虫的例子来看,真的非常简单,就是一个获取网页数据的类或者方法(这里的话 ...

  6. c# 连续抓取页面内容

    实现功能:去一个url抓取页面,在页面的内容里面在去找另一个url.找到这个这url之后经过一系列操作后再去重组的url去抓取内容. 第一.写出c#抓取页面的代码 c#抓取页面 1 using Sys ...

  7. PHP使用CURL抓取页面

    cURL的基本原理 curl是利用URL语法在命令行方式下工作的开源文件传输工具,他能够从互联网上获得各种各样的网络资源.简单来说,curl就是抓取页面的升级版. <?php//1.初始化,创建 ...

  8. jquery页面跳转带cookie_搭建谷歌浏览器无头模式抓取页面服务,laravelgt;phpgt;pythongt;docker...

    背景: 公司管理系统需要获取企业微信页面的配置参数如企业名.logo.人数等信息并操作,来隐藏相关敏感信息并自定义简化企业号配置流程 第一版已经实现了扫码登录获取cookie,使用该cookie就能获 ...

  9. Java爬虫系列二:使用HttpClient抓取页面HTML

    爬虫要想爬取需要的信息,首先第一步就要抓取到页面html内容,然后对html进行分析,获取想要的内容.上一篇随笔<Java爬虫系列一:写在开始前>中提到了HttpClient可以抓取页面内 ...

最新文章

  1. qt快速加载图片_Qt实用技巧:使用Qt加载超大图片的耗时测试
  2. 大白话5分钟带你走进人工智能-第十一节梯度下降之手动实现梯度下降和随机梯度下降的代码(6)...
  3. 2020年推荐系统工程师炼丹手册
  4. 活动平台为何没有x86?_一个由跨平台产生的浮点数bug | 有你意想不到的结果
  5. Oracle函数的信息,Oracle中获取会话信息的两个函数分享
  6. java基础巩固笔记(5)-多线程之线程并发库
  7. cube云原生机器学习平台-架构(五)
  8. APP完整的启动流程
  9. .net下samus Mongo-Cshap 引擎中的find原生查询
  10. 列车控制matlab仿真,基于matlab的列车纵向碰撞建模仿真研究
  11. offer来了(原理篇)学习笔记-第9章设计模式
  12. 计算机网络正掩码怎么计算器,计算机网络课设子网掩码计算器.doc
  13. 【话题:工作生活】2021年工作总结--这些人,那些事。
  14. MDK编译报错Error: L6218E: Undefined symbol main (referred from __rtentry2.o)
  15. 什么是软件质量——基于ISO质量定义对软件质量的理解
  16. HTTPS 和 SSL/TLS 协议:密钥交换(密钥协商)算法及其原理
  17. 计算机二级第一次考试不及格有没有影响,计算机二级还没有过吗?
  18. unity 陶瓷质感_一种基于Unity3D的虚拟陶瓷设计方法与流程
  19. APP性能测试--内存测试
  20. ftp服务器中的文档不能直接打开为啥,如何直接打开ftp里的 word 文档 win7 ftp直接打开word...

热门文章

  1. libpng16.so.16错误
  2. Linux centos7.6 安装elasticsearch8.x (es8) 教程
  3. 视神经萎缩学计算机专业好吗,治视神经萎缩的维生素 视神经萎缩有哪些症状...
  4. 怎么自测植物神经紊乱
  5. Android开源项目及库整理总结
  6. python 获取当前时间(年月日时分秒)
  7. word2010添加论文引用
  8. dns劫持 tplink_解决路由器DNS劫持的两种方法
  9. 计算机专业英语选择题,计算机专业英语单选题
  10. metamask 最新版官方版