php抓取网页内容(做过j2ee或android开发的童鞋,应该或多或少都使用过Apeache的HttpClient类库)

优采云 发布时间: 2021-10-10 16:16

  php抓取网页内容(做过j2ee或android开发的童鞋,应该或多或少都使用过Apeache的HttpClient类库)

  做过j2ee或者android开发的童鞋,应该或多或少用过Apeache的HttpClient库。这个类库为我们提供了非常强大的服务端Http请求操作。在开发中使用非常方便。

  在最近的php开发中,也有需要在服务端发送http请求,然后处理返回给客户端。如果用socket来做,可能不会太麻烦。我想看看php中有没有像HttpClient这样的库。

  我google了一下,发现PHP中有这样一个库,名字叫httpclient。我很兴奋。看了官网,发现很多年没更新了,功能好像也有限。我很失望。然后我找到了另一个图书馆,史努比。我对这个库一无所知,但是网上反响很好,所以我决定使用它。他的API用法和Apeache的HttpClient有很大的不同,但是还是非常好用的。它还提供了很多特殊用途的方法,比如只抓取页面上的表单表单,或者所有的链接等等。

  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 "" . htmlspecialchars($snoopy->results) . "

  \n";} else {echo "error fetching document: ". $snoopy->error. "\n";}

  更多操作方法可以去史努比官方文档,或者直接查看源码。

  此时,snoopy 只是将页面取回。如果您想从获取的页面中提取数据,那么它不会有太大帮助。在这里我找到了另一个php解析html的好工具:phpQuery,它提供了和jquery几乎一样的操作方法,并且提供了一些php的特性。对于熟悉jquery的小朋友来说,使用phpquery应该是相当容易的,甚至phpQuery的文件都不需要了。。

  使用Snoopy+PhpQuery可以轻松实现网页抓取和数据分析。这是非常有用的。最近也有这方面的需求,发现了这两个不错的库。Java 可以做很多事情。php也可以。

  有兴趣的同学也可以尝试用它们来制作一个简单的网络爬虫。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线