zoukankan      html  css  js  c++  java
  • 使用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>" . htmlspecialchars($snoopy->results) . "</PRE>\n";
    } else {
        echo "error fetching document: " . $snoopy->error . "\n";
    }

    更多的操作方法,可以去Snoopy的官方查看文档,或者是直接查看源代码。

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

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

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

  • 相关阅读:
    VS2010 创建 windows service 程序
    应用程序 调用 webservice
    管理随笔-组织无全面系统目标和规划
    笔记1——自写综保模块非语言实现方式
    测试模型V模型和W模型
    常用研发模型
    测试方法分类
    初识测试
    IntelliJ IDEA使用快捷键生成各种for循环。增强for循环等等
    java之jdbc数据库连接
  • 原文地址:https://www.cnblogs.com/jdluojing/p/3212407.html
Copyright © 2011-2022 走看看