php如何抓取网页数据(做过j2ee或android开发的童鞋,应该或多或少都使用过Apeache的HttpClient类库)
优采云 发布时间: 2022-03-08 03:01php如何抓取网页数据(做过j2ee或android开发的童鞋,应该或多或少都使用过Apeache的HttpClient类库)
如果你做过童鞋的j2ee或者android开发,应该多多少少用过Apeache的HttpClient类库。这个类库为我们提供了非常强大的服务端Http请求操作。在开发中使用非常方便。
最近在php的开发中,也需要在服务端发送http请求,然后再处理回客户端。
我google了一下,发现php中有这样一个类库,名字叫httpclient。我很兴奋。去了官网,发现已经很多年没有更新了,功能好像也有限,很是失望。然后我找到了另一个类库,Snoopy。我对这个类库了解不多,但是网上的反响还不错,所以我决定用它。它的 API 使用与 Apache 的 HttpClient 有很大的不同,但仍然非常好用。并且提供了很多特殊用途的方法,比如只能抓取页面中的form表单,或者所有的链接等等。
include 'Snoopy.class.php';
$snoopy = new Snoopy();
$snoopy->fetch("http://www.baidu.com");
echo $snoopy->results;
以上几行代码就可以轻松爬取百度的页面。
当然,当需要发送post表单时,可以使用submit方法提交数据。
同时,他还传递了cookies的请求头、对应头以及相关操作函数,功能非常强大。
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 "错误获取文档:" . $snoopy->error . "\n";}
更多操作方法可以去Snoopy的官方文档,或者直接查看源码。
此时,snoopy 只取回页面。如果您想从获取的页面中提取数据,那么它不会有太大帮助。这里又找到了一个php解析html的好工具:phpQuery,它提供了和jquery几乎一样的操作方法,并且提供了一些php的特性,熟悉jquery的童鞋,应该还是蛮好用的phpquery,连phpQuery的文档都没有已经需要了。。
使用Snoopy+PhpQuery可以轻松实现网页抓取和数据分析。这是非常有用的。我最近也需要这个,只找到了这两个不错的类库。事实证明,java可以做的事情有很多。php也可以做到。
有兴趣的同学也可以尝试用它们制作一个简单的网络爬虫。