php抓取页面方法汇总
在做一些互联网应用的时候,往往需要抓取网络文件大多数网页文件,一般情况下都是利用php模拟浏览器的访问,通过http请求访问url地址,然后得到html源代码或者其它格式的数据,然后对这些数据进行处理格式化,按照我们事先约定好的方式输出到终端或其它接口。
一、 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. 正则表达式
2. PHP DOMDocument对象
3. 插件(如:PHP Simple HTML DOM Parser)
如果你对以上内容已经很了解,以下内容可以飘过......
PHP抓取页面
1. file()函数
复制代码 代码如下:
<?php
$url='http://t.qq.com';
$lines_array=file($url);
$lines_string=implode('',$lines_array);
echo htmlspecialchars($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='http://t.qq.com';
$lines_string=file_get_contents($url);
echo htmlspecialchars($lines_string);
?>
3. fopen()->fread()->fclose()模式
复制代码 代码如下:
<?php
$url='http://t.qq.com';
$handle=fopen($url,"rb");
$lines_string="";
do{
$data=fread($handle,1024);
if(strlen($data)==0){break;}
$lines_string.=$data;
}while(true);
fclose($handle);
echo htmlspecialchars($lines_string);
?>
4. curl方式
使用curl必须空间开启curl。方法:windows下修改php.ini,将extension=php_curl.dll前面的分号去掉,而且需要拷贝ssleay32.dll和libeay32.dll到C:\WINDOWS\system32下;Linux下要安装curl扩展。
复制代码 代码如下:
<?php
$url='http://t.qq.com';
$ch=curl_init();
$timeout=5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$lines_string=curl_exec($ch);
curl_close($ch);
echo htmlspecialchars($lines_string);
?>
5. fsockopen()函数 socket模式
socket模式能否正确执行,也跟服务器的设置有关系,具体可以通过phpinfo查看服务器开启了哪些通信协议,比如我的本地php socket没开启http,只能使用udp测试一下了。
复制代码 代码如下:
<?php
$fp = fsockopen("udp://127.0.0.1", 13, $errno, $errstr);
if (!$fp) {
echo "ERROR: $errno - $errstr<br />\n";
} else {
fwrite($fp, "\n");
echo fread($fp, 26);
fclose($fp);
}
?>
6. 插件
网上应该有比较多的插件,snoopy插件是在网上搜到的,有兴趣的可以研究一下。
PHP解析xml(html)
1. 正则表达式:
复制代码 代码如下:
<?php
$url='http://t.qq.com';
$lines_string=file_get_contents($url);
eregi('<title>(.*)</title>',$lines_string,$title);
echo htmlspecialchars($title[0]);
?>
2. PHP DOMDocument()对象
如果远程的html或xml存在语法错误,php在解析dom的时候会报错。
复制代码 代码如下:
<?php
$url='http://www.136web.cn';
$html=new DOMDocument();
$html->loadHTMLFile($url);
$title=$html->getElementsByTagName('title');
echo $title->item(0)->nodeValue;
?>
3. 插件
本文以PHP Simple HTML DOM Parser为例,进行简单介绍,simple_html_dom的语法类似jQuery,它让php操作dom,就像使用jQuery操作dom一样的简单。
复制代码 代码如下:
<?php
$url='http://t.qq.com';
include_once('../simplehtmldom/simple_html_dom.php');
$html=file_get_html($url);
$title=$html->find('title');
echo $title[0]->plaintext;
?>
php抓取页面方法汇总相关推荐
- 抓取Systrace方法汇总
目录 1. 使用Android Device Monitor抓取 Systrace 2. 使用命令行抓取 Systrace 3. 命令抓取Atrace 3.1. 抓取atrace 3.2. 转换为sy ...
- php 让百度蜘蛛抓取403,百度蜘蛛不抓取页面的解决方法
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 我们都知道我们网站的页面要想被百度收录必须经过百度蜘蛛的抓取,因此我们要经常关注我们网站页面被抓取的情况,如果遇到不被抓取的情况,那么就要引起我们的注意, ...
- curl抓取页面时遇到重定向的解决方法(转)
用php的curl抓取网页遇到了问题,为阐述方便,将代码简化如下: [php] view plaincopy <?php function curlGet($url) { $ch = curl_ ...
- 爬虫抓取页面数据原理(php爬虫框架有很多 )
爬虫抓取页面数据原理(php爬虫框架有很多 ) 一.总结 1.php爬虫框架有很多,包括很多傻瓜式的软件 2.照以前写过java爬虫的例子来看,真的非常简单,就是一个获取网页数据的类或者方法(这里的话 ...
- Python语言程序设计之urllib.request抓取页面,网易公开课之《麻省理工学院公开课:算法导论》
Python语言用urllib.request模块抓取页面非常简单,再将抓取的页面内容用re模块解析,找出自己想要的东西.下面就就此方法来抓取网易公开课之<麻省理工学院公开课:算法导论>, ...
- c# 连续抓取页面内容
实现功能:去一个url抓取页面,在页面的内容里面在去找另一个url.找到这个这url之后经过一系列操作后再去重组的url去抓取内容. 第一.写出c#抓取页面的代码 c#抓取页面 1 using Sys ...
- CasperJS基于PhantomJS抓取页面
CasperJS基于PhantomJS抓取页面 Casperjs是基于Phantomjs的,而Phantom JS是一个服务器端的 JavaScript API 的 WebKit. CasperJS是 ...
- Java爬虫系列二:使用HttpClient抓取页面HTML
爬虫要想爬取需要的信息,首先第一步就要抓取到页面html内容,然后对html进行分析,获取想要的内容.上一篇随笔<Java爬虫系列一:写在开始前>中提到了HttpClient可以抓取页面内 ...
- Python之网络爬虫(验证码、代理IP、防反爬策略、封装一个抓取页面的函数)
文章目录 一.使用tesseract做OCR验证码识别 二.代理服务器设置 三.反爬与防反爬 四.封装一个抓取页面的函数 一.使用tesseract做OCR验证码识别 1.cookie, sessio ...
最新文章
- .NET+IIS+MSSQL配置
- CUDA和cuDNN到底是啥关系?(cuDNN是基于CUDA的深度学习GPU加速库)
- 592zn rom/apk 自动签名工具_ios超级签名服务器
- 编写jmeter测试用例_JMeter 编写接口测试用例遇到的问题及解决
- 新浪微博2-找到用户的accessToken
- C# —— 进程与线程的理解
- [Java]关于throw,throws,try{}catch(){}
- C#的多线程机制探索6
- Windows下安装Semantic-Segmentation-Editor标注软件
- 拓端tecdat|R语言分解商业周期时间序列数据:线性滤波器、HP滤波器、Baxter King滤波器、Beveridge Nelson分解等去趋势方法
- linux-ab压力测试
- 新老电脑的文件/数据同步记录
- TeamViewer 远程应用不显示,空白解决方案
- 怎么调用微信自带的收货地址和我的地址功能页面。
- 刘顺琦 - CSCI 561 mid 1definition
- 插图精美的html css教程
- 一次业务逻辑优化,竟然解决了MySQL CPU消耗800%的性能问题!
- configure: error: no acceptable C compiler found in $PATH 问题解决
- 一条update语句更新多条sql记录
- 区块链世界的流量聚集地
热门文章
- 阿里内核数据库文章-目录
- miui 9 android pay,小米9多功能NFC再升级,Mi Pay线上支付上线
- 中国杰出雇主2023榜单正式揭晓,共有139家企业获得认证 | 美通社头条
- Swift减少print函数的耗费
- java中的throw_java 中Throw能抛出的是什么?
- 【国家局发布】医疗器械注册流程及相关法规大全
- 从云服务器硬盘更换认识备份、快照、镜像
- mysql创建新闻发布时间_基于PHP+mysql实现新闻发布系统的开发
- CSS:“ ”这个符号在css中一般用 arial字体
- 苹果开发者账号官方翻译篇-团队管理