php抓取网页(做过j2ee或android开发的童鞋,应该或多或少都使用过Apeache的HttpClient类库)
优采云 发布时间: 2021-09-14 23:11php抓取网页(做过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也可以做同样的事情。
有兴趣的同学,也可以尝试用它们做一个简单的网络爬虫。