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

优采云 发布时间: 2021-09-14 23:11

  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人工客服


线