几种PHP实现网页抓取的程序代码
网页抓取就像搜索引擎一个可以去自动抓取其它服务器上的内容了,下面我整理的几个php常用做法,大家一起来看看。
抓取某一个网页中的内容,需要对DOM树进行解析,找到指定节点后,再抓取我们需要的内容,过程有点繁琐。LZ总结了几种常用的、易于实现的网页抓取方式,如果熟悉JQuery选择器,这几种框架会相当简单。
一、Ganon
项目地址: http://code.google.com/p/ganon/
文档: http://code.google.com/p/ganon/w/list
测试:抓取我的网站首页所有class属性值是focus的div元素,并且输出class值
<?php
 include 'ganon.php';
 $html = file_get_dom('http://www.phprm.com/');
 foreach($html('div[class="focus"]') as $element) {
   echo $element->class, "<br>n"; 
 }
结果:

二、phpQuery
项目地址:http://code.google.com/p/phpquery/
文档:https://code.google.com/p/phpquery/wiki/Manual
测试:抓取我网站首页的article标签元素,然后出书其下h2标签的html值
<?php
include 'phpQuery/phpQuery.php'; 
phpQuery::newDocumentFile('http://www.phprm.com/'); 
$artlist = pq("article"); 
foreach($artlist as $title){ 
   echo pq($title)->find('h2')->html()."<br/>"; 
} 
结果:

  三、Simple-Html-Dom
项目地址: http://simplehtmldom.sourceforge.net/
文档: http://simplehtmldom.sourceforge.net/manual.htm
文档: http://simplehtmldom.sourceforge.net/manual.htm
测试:抓取我网站首页的所有链接
<?php
include 'simple_html_dom.php';
//使用url和file都可以创建DOM
$html = file_get_html('http://www.phprm.com/');
//找到所有图片
// foreach($html->find('img') as $element)
//        echo $element->src . '<br>';
//找到所有链接
foreach($html->find('a') as $element)
       echo $element->href . '<br>'; 
结果:(截图是一部分)

四、Snoopy
项目地址:http://code.google.com/p/phpquery/
文档:http://code.google.com/p/phpquery/wiki/Manual
测试:抓取我的网站首页
<?php
include("Snoopy.class.php");
$url = "http://www.phprm.com";
$snoopy = new Snoopy;
$snoopy->fetch($url); //获取所有内容
 echo $snoopy->results; //显示结果
// echo $snoopy->fetchtext ;//获取文本内容(去掉html代码)
// echo $snoopy->fetchlinks($url) ;//获取链接
// $snoopy->fetchform ;//获取表单 
结果:

五、手动编写爬虫
如果编写能力ok,可以手写一个网页爬虫,实现网页抓取。网上有千篇一律的介绍此方法的文章,LZ就不赘述了。有兴趣了解的,可以百度 php 网页抓取。
七、开源爬虫软件汇总
| 发语言 | 软件名称 | 软件介绍 | 许可证 | 
| Java | Arachnid | 微型爬虫框架,含有一个小型HTML解析器 | GPL | 
| crawlzilla | 安装简易,拥有中文分词功能 | Apache2 | |
| Ex-Crawler | 由守护进程执行,使用数据库存储网页信息 | GPLv3 | |
| Heritrix | 严格遵照robots文件的排除指示和META robots标签 | LGPL | |
| heyDr | 轻量级开源多线程垂直检索爬虫框架 | GPLv3 | |
| ItSucks | 提供swing GUI操作界面 | 不详 | |
| jcrawl | 轻量、性能优良,可以从网页抓取各种类型的文件 | Apache | |
| JSpider | 功能强大,容易扩展 | LGPL | |
| Leopdo | 包括全文和分类垂直搜索,以及分词系统 | Apache | |
| MetaSeeker | 网页抓取、信息提取、数据抽取工具包,操作简单 | 不详 | |
| Playfish | 通过XML配置文件实现高度可定制性与可扩展性 | MIT | |
| Spiderman | 灵活、扩展性强,微内核+插件式架构,通过简单的配置就可以完成数据抓取,无需编写一句代码 | Apache | |
| webmagic | 功能覆盖整个爬虫生命周期,使用Xpath和正则表达式进行链接和内容的提取 | Apache | |
| Web-Harvest | 运用XSLT、XQuery、正则表达式等技术来实现对Text或XML的操作,具有可视化的界面 | BSD | |
| WebSPHINX | 由两部分组成:爬虫工作平台和WebSPHINX类包 | Apache | |
| YaCy | 基于P2P的分布式Webseo/seo.html" target="_blank">搜索引擎 | GPL | |
| Python | QuickRecon | 具有查找子域名名称、收集电子邮件地址并寻找人际关系等功能 | GPLv3 | 
| PyRailgun | 简洁、轻量、高效的网页抓取框架 | MIT | |
| Scrapy | 基于Twisted的异步处理框架,文档齐全 | BSD | |
| C++ | hispider | 支持多机分布式下载, 支持网站定向下载 | BSD | 
| larbin | 高性能的爬虫软件,只负责抓取不负责解析 | GPL | |
| Methabot | 经过速度优化、可抓取WEB、FTP及本地文件系统 | 不详 | |
| Methanol | 模块化、可定制的网页爬虫,速度快 | 不详 | |
| C# | NWebCrawler | 统计信息、执行过程可视化 | GPLv2 | 
| Sinawler | 国内第一个针对微博数据的爬虫程序,功能强大 | GPLv3 | |
| spidernet | 以递归树为模型的多线程web爬虫程序,支持以GBK (gb2312)和utf8编码的资源,使用sqlite存储数据 | MIT | |
| Web Crawler | 多线程,支持抓取PDF/DOC/EXCEL等文档来源 | LGPL | |
| 网络矿工 | 功能丰富,毫不逊色于商业软件 | BSD | |
| PHP | OpenWebSpider | 开源多线程网络爬虫,有许多有趣的功能 | 不详 | 
| PhpDig | 适用于专业化强、层次更深的个性化搜索引擎 | GPL | |
| Snoopy | 具有采集网页内容、提交表单功能 | GPL | |
| ThinkUp | 采集推特、脸谱等社交网络数据的社会媒体视角引擎,可进行交互分析并将结果以可视化形式展现 | GPL | |
| 微购 | 可采集淘宝、京东、当当等300多家电子商务数据 | GPL | |
| ErLang | Ebot | 可伸缩的分布式网页爬虫 | GPLv3 | 
| Ruby | Spidr | 可将一个或多个网站、某个链接完全抓取到本地 | MIT | 
本文地址:http://www.phprm.com/code/69216.html
转载随意,但请附上文章地址:-)