>백엔드 개발 >PHP 튜토리얼 > 施用php发送Http请求,抓取网页数据

施用php发送Http请求,抓取网页数据

WBOY
WBOY원래의
2016-06-13 12:50:25880검색

使用php发送Http请求,抓取网页数据

做过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 class="brush:php;toolbar:false">" . htmlspecialchars($snoopy->results) . "
\n"; } else { echo "error fetching document: " . $snoopy->error . "\n"; } 更多的操作方法,可以去Snoopy的官方查看文档,或者是直接查看源代码。

到这里,snoopy也仅仅是把页面抓取回来,如果要对抓取回来的页面进行数据提取,那么它就帮不上什么忙了。这里我又找到了另外一个php解析html的好工具:phpQuery,它提供的操作方法和jquery几乎一模一样,而且提供了一些php的特性,熟悉jquery的童鞋,用phpquery应该是相当的顺手啊,甚至phpQuery的文档都不需要了..

使用Snoopy+PhpQuery可以很方便的实现网页的抓取和数据解析,十分有用啊,我也是最近有这方面的需要,才发现了这两个不错的类库啊,原来很多java可以做的事情,php也能做哦。

有兴趣的同学,也可以试试用他们来做个简易的网页爬虫哦。

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.