做过j2ee 或android开发的童鞋,应该或多或少都使用过Apeache的HttpClient类库吧。这个类库给我们提供了十分强大的服务端Http请求操作。在开发中使用起来十分的方便。
最近做php的开发,也有需要在服务端发送http请求,然后处理返回到客户端,如果用socket来做,未必又太麻烦了,心想这看看php中有没有类似HttpClient这样的类库。
Google了一下,发现php中还真有这么一个类库,而且名字就叫做httpclient,相当的激动啊,到官网一看,发现已经好多年都没更新过了,而且功能貌似也有限,大失所望啊。接着我找到了另外一个类库Snoopy,对于这个类库我也不了解,不过看网上的响应还不错,于是决定就用他了。他的API使用和Apeache的HttpClient差别很大,但是还是十分容易使用。而且提供了许多特殊用途的方法,比如可以只抓去页面中的form表单,或者所有的链接等等。
include 'Snoopy.class.php';
$snoopy = new Snoopy();
$snoopy->fetch("http://www.baidu.com");
echo $snoopy->results;
上面这几句代码,就可以很轻松的将百度的页面抓取过来。
当然在需要发送post表单时,可以使用submit方法来提交数据。
同时他还通过了请求头,相应头以及Cookie的相关操作函数,十分的强大。
include "Snoopy.class.php";
$snoopy = new Snoopy();
$snoopy->proxy_host = "http://www.baidu.cn";
$snoopy->proxy_port = "80";
$snoopy->agent = "(compatible; MSIE 4.01; MSN 2.5; AOL 4.0; Windows 98)";
$snoopy->referer = "http://www.4wei.cn";
$snoopy->cookies["SessionID"] = '238472834723489';
$snoopy->cookies["favoriteColor"] = "RED";
$snoopy->rawheaders["Pragma"] = "no-cache";
$snoopy->maxredirs = 2;
$snoopy->offsiteok = false;
$snoopy->expandlinks = false;
$snoopy->user = "joe";
$snoopy->pass = "bloe";
if($snoopy->fetchtext("http://www.baidu.cn")) {
echo "<PRE>" . htmlspecialchars($snoopy->results) . "</PRE>\n";
} else {
echo "error fetching document: " . $snoopy->error . "\n";
}
更多的操作方法,可以去Snoopy的官方查看文档,或者是直接查看源代码。
到这里,snoopy也仅仅是把页面抓取回来,如果要对抓取回来的页面进行数据提取,那么它就帮不上什么忙了。这里我又找到了另外一个php解析html的好工具:phpQuery,它提供的操作方法和jquery几乎一模一样,而且提供了一些php的特性,熟悉jquery的童鞋,用phpquery应该是相当的顺手啊,甚至phpQuery的文档都不需要了..
使用Snoopy+PhpQuery可以很方便的实现网页的抓取和数据解析,十分有用啊,我也是最近有这方面的需要,才发现了这两个不错的类库啊,原来很多java可以做的事情,php也能做哦。
有兴趣的同学,也可以试试用他们来做个简易的网页爬虫哦。
分享到:
相关推荐
cURL是利用url语法规定传输文件和数据的工具。php中有curl拓展,一般用来实现网络抓取,模拟发送get ...实例一 : 抓取网页数据(以拉手网开放api为例,也是get请求) <?php header(Content-type: text/html; c
二、主要技术本案例主要使用PHP 7中的数据传输神器cURL来抓取网络资源、动态获取WebService数据接口数据和发送HTTP请求,从而来实现简单网页爬虫程
本案例主要使用PHP 7中的数据传输神器cURL来抓取网络资源、动态获取WebService数据接口数据和发送HTTP请求,从而来实现简单网页爬虫程序的编写、调用WebService查询当前天气和访问HTTPS资源的功能。
2抽奖模块:用户通过请求发送数据到后端,后端获取抽奖人员id并通过RequestMapping 解来处理前端的请求 并返回响应. 3奖项模块:通过后端实现了新增奖项,修改奖项,删除奖项等功能,在修改奖项采用了批量更新,使用...
使用正则表达式抓取网站并收集您想要的任何类型的信息 所有请求都可以通过代理列表中的随机代理发送 由强大的 RollingCurl 提供支持,这是一个支持异步线程的快速卷曲包装器 与框架无关,适用于任何项目 Composer ...
异步/多请求 SSL支持(非默认-设置选项) 适配器支持(插槽) 测验 追踪功能 简单 页面追踪 事件追踪 社会的社交追踪 例外异常追踪 运动广告活动追踪 应用程式 应用事件跟踪 应用程序屏幕跟踪 用户 用户计时跟踪 ...
按照一定的规律发送 HTTP 请求获得页面 HTML 源码(必要时需要加上一定的 HTTP 头信息,比如 cookie 或 referer 之类) 利用正则匹配或第三方模块解析 HTML 代码,提取有效数据 将数据持久化到数据库中 但是真正...
要提取google搜索的部分数据,发现google对于软件抓取它的数据屏蔽的厉害,以前伪造下 USER-AGENT 就可以抓数据,但是现在却不行了。利用抓包数据发现,Google 判断了 cookies,当你没有cookies的时候,直接返回 302...
无论是javaSE开发环境,还是javaWeb/javaEE开发环境,您都可以使用这些工具类进行诸如文件系统操作(文件或文件夹的移动、复制、删除等)、图片打水印、缩放、发送邮件、URL地址资源请求、HTML抓取、文件下载、常用...
无论是javaSE开发环境,还是 javaWeb/javaEE开发环境,您都可以使用这些工具类进行诸如文件系统操作(文件或文件夹的移动、复制、删除等)、图片打水印、缩放、发送邮件、URL地址资源请求、HTML抓取、文件下载、常用...
访问请求数据 7.4.2.2. 基地址和子目录 7.4.2.3. 决定请求方式 7.4.2.4. 删除 AJAX 请求 7.4.3. 子类化请求对象 7.5. 标准路由器:Zend_Controller_Router_Rewrite 7.5.1. 简介 7.5.2. 使用路由器 7.5.3. ...