当前位置:首页 > 建站技术 > 正文

网站数据采集软件_PHP网页数据采集利器PHP Simple HTML DOM Parser

发布时间:2016-09-03作者:张安林阅读:2101
相信,现在做网站的朋友们都知道采集一事,尤其是在新建站,并且已经有了同行且做了较长时间的前提下,采集别人的内容数据往往是第一时间想到的事情。很多时候,做运营或者营销的朋友都是使用一些采集软件来采集内容,或者把采集数据的要求交给技术。如果是自己用软件采集,缺点是往往需要二次编辑,而且针对性不强,筛选上会会很多时间。当然如果是交给技术去做,那没什么好说的。
别人的东西只适用于别人的环境,如果想做好自己的采集,能懂一些采集工具的使用,是一件非常爽的事情哦。今天就跟大家推荐一款非常棒的网页数据采集工具——PHP Simple HTML DOM Parser。
PHP Simple HTML DOM Parser

用这个类很简单,里面只有一个核心文件,就是 simple_html_dom.php
其他的功能调用,实现,都给予该文件进行即可。

先来说说作者以前是怎么采集网页内容的
作者以前通过自学学习了PHP的使用,过去采集内容,一般都是用正则来匹配内容。不过,有些时候我们只需要其中一个html标签内的内容,这个时候就需要找到该标签的起始和结尾。一般情况下,起始位置比较好找,也比较好判断,但是结尾往往是比较麻烦的。比如一个div标签,起始的地方往往会有id或者class或者其他的东西加以判断,但是结尾的时候全都是。如果里面再嵌套很多个不同的div,在这个div之后还有很多div的话,用正则就会很麻烦,因为你很难找到准确的结尾位置。在这个时候,如果有个通过html dom来获取对应内容的方法就好了。而这个PHP Simple HTML DOM Parser就是通过html dom来获取对应的网页内容的,一下子可以解决正则无法做到的效果。

牛人就是牛人,写的东西真不是一般人能够写得出来的,功能也不是一般的强大。通过阅读API文档我们可以看到,它使用了jquery(或者说css)的数据调用方法,只要你会jquery(或css),那基本就会玩这个类了。

贴一些demo吧:

//获取网页(文件)内容
$html = file_get_html('http://www.oschina.net/');

//获取指定标签的内容
$txt=$html->find('a');
foreach($txt as $v){
echo $v->href;
}
说明:
find:你需要获取的html标签名,demo中是获取所有链接a标签。如果想获取指定的第几个,在find中添加第二个参数,即标签在html中的位置索引,从0开始哦。
href:因为我获取了所有的a标签,现在我要拿出它的链接地址,a标签里面的链接地址用的是href嘛,所以这里就是href了。这个完全根据html规范来的。具体需要获取什么内容,就是网页html中是什么就好了。

//获取对应的文字信息
outertext获取或者设置元素的 outer HTML
innertext获取或者设置元素的 inner HTML
plaintext获取或者设置元素的纯文本
用法:$html->find("div",0)->plaintext;

//查找指定元素,完全是用css的方法
// 查找所有的 a链接, 返回一个DOM元素对象数组
$ret = $html->find('a');

// 通过索引获取数组中指定的元素DOM对象,第二个参数是DOM对象数组的索引,从0开始。如果不存在返回null
$ret = $html->find('a', 0);

// 通过索引-1获取数组中的最后的一个元素DOM对象,如果不存在返回null
$ret = $html->find('a', -1);

// 查找所有具有id属性的div
$ret = $html->find('div[id]');

// 查找所有具有id=foo属性的div
$ret = $html->find('div[id=foo]');

// 查找所有id是foo的元素
$ret = $html->find('#foo');

// 查找所有class是foo的元素
$ret = $html->find('.foo');

//查找所有拥有id属性的元素
$ret = $html->find('*[id]');

// 查找所有的a链接和img图片元素
$ret = $html->find('a, img');

// 查找所有拥有title属性的a链接和img图片元素
$ret = $html->find('a[title], img[title]');

// 查找ul后代中的 li 元素
$es = $html->find('ul li');

// 查找嵌套的div元素
$es = $html->find('div div div');

// 查找class是hello的table中的td元素
$es = $html->find('table.hello td');

// 查找所有align=center的td元素
$es = $html->find(''table td[align=center]');
选择器 描述
[attribute] 匹配所有拥有attribute属性的元素
[!attribute] 匹配所有没有attribute属性的元素
[attribute=value] 匹配所有attribute属性值是value的元素
[attribute!=value] 匹配所有attribute属性值不是value的元素
[attribute^=value] 匹配所有attribute属性值是value开头的元素
[attribute$=value] 匹配所有attribute属性值是value结尾的元素
[attribute*=value] 匹配所有attribute属性值包含value的元素

//获取所有的文本块
$es = $html->find('text');

// 获取所有的HTML注释 () 块
$es = $html->find('comment');

// 获取属性 (如果属性是没有值的属性(比如:checked, selected等)那么返回的是true或者false)
$value = $e->href;

// 设置属性 (如果属性是没有值的属性(比如:checked, selected等)那么值设置为true或者false)
$e->href = 'my link';

// 删除属性,只要把属性赋值null即可
$e->href = null;

一些demo就贴出来这么多好了,还想要看更多的朋友就看官方API即可。使用它的好处,就是选择很方便,并且抓取的内容是成对的,不会多也不会少,可以解决正则无法做到的事情。如果做站需要采集内容,用它真的很方便的,当拿到正确的内容后,对内容进行编排并入库就很简单了,可以自由发挥了。

如果有些朋友比较喜欢自己做这些东西,建议平时可以多研究或者搜集一些有用的代码,编成函数保存。当以后调用的时候可以很方便找到并立马应用,不用每次都重新写一遍哦。
常用函数
上图就是作者搜集的部分截图,部分为工作需要自己写的函数,有的则是网上找的,大多数时候需要的功能都在这里能够找得到呢。

当然,如果是采集别家的内容,还有很多其他的事情需要做的。
比如,别家要是屏蔽IP怎么办,该工具抓不到内容怎么办,要输入验证码怎么办等等。只有遇到的情况多了,多思考解决办法,这些其实都不是事儿哦。屏蔽IP,可以用VPN啊,输入验证码的话,非必须登陆可以模拟useragent,要输入验证码,也可以模拟useragent。当然,具体的情况使用具体的方法,这个不在本文讨论。

上面说了方法和工具,可能很多朋友说,我不会PHP怎么办?如果是有毅力的朋友,其实学会它不难的哦,想当初作者也就学了两个礼拜,每天下班后在办公室看一章。接下来就是实践、写,所以今天自己做个网站都觉得很简单哦。不想学技术的朋友暂时还是让技术帮忙更好吧,一些采集工具要么要写很复杂的正则,要么就是要二次修改。既然采集,我们要的就是高效,争取拿过来的东西可以直接入库使用呢。
本文为张安林原创,转载请注明出处 http://www.zhanganlin.com/jishu/4
SEO网站优化
建站技术
网站运营