使用采集器时,新手可能被几个问题困扰:dom规则写法五分钟入门一些示例要学会利用dom获取网页内容,要求你具备那么一些基本的html知识,知道网页的内容结构都是一层一层嵌套的。 在此, 我无法确切通俗的告诉你什么叫做dom,但是看了如下的一个示例,也许你会更直观的明白。 假如一个网页的源代码如下所示 示例一:如果你想取到里面的内容,怎么写?我们dom的写法是这样的: div[class=test]。这样就能获取到元素里面的内容,即:要取的内容。这是最简单是示例了。其中[] 符号内放的是这个div元素的属性,再比如 示例二: 可以这样表示:div[id=test]。要是元素不是一个div,而是一个span,如下代码:
示例三:
也很简单,可以这样表示span[id=test] 稍微复杂一点的结构,如下 示例四: 有两层元素,该怎么写?采集器的写法是: div[class=test] span[id=mytest],中间用空格隔开,外层的写在前面。 好了,举上面的四个列子已经足够说明所有的问题。
规则的简写1、span[id=mytest] 可以简写成span#mytest 表示查找id=mytest的span元素 2、span[class=mytest] 可以简写成span.mytest 表示查找class=mytest的span元素 如果同时有两个class不可以简写,如下面这种情况:<div class="test test1">要取的内容</div> 必须写成:div[class=test test1] 上面的几个示例放在浏览器里面也许更直观,如下图:
一些高级的属性设置除了可以用class=test这样的写法获取之外,采集器还提供了一些更高级的写法,用在特殊的情况下获取 :过滤 | 描述 |
---|
属性 | 匹配具有指定属性的元素。如 div[id] 表示通过id属性 查找所有的<div> |
---|
!属性 | 匹配不具有指定属性的元素。 如 div[!id] 表示 查找所有没有id属性的<div> |
---|
[属性=value] | 匹配具有指定属性值的元素。如 div[id=test] 表示查找id=test的div元素 |
---|
[属性!=value] | 匹配不具有指定属性值的元素。 如 div[id!=test] 表示查找id不等于test的div元素 |
---|
[属性^=value] | 匹配包含特定前缀的值的指定属性的元素。如 div[id^=test] 表示查找id前缀为test的div元素 |
---|
[属性$=value] | 匹配包含特定后缀的值的指定属性的元素。如 div[id$=test] 表示查找id后缀为test的div元素 |
---|
[属性*=value] | 匹配具有指定属性的元素,且该属性包含了一定的值。如 div[id*=test] 表示查找id包含test的div元素 |
---|
2.5版本增加的写法:规则组合可以把几个规则组合在一起,比如下面几个实例: 网页源代码:
示例一:普通写法(无法获取多个内容)
示例二:组合写法
示例三:在组合规则里面嵌入自定义代码
取第N个元素:源代码如下图:
如果想取第三个li里面的内容,怎么写规则? 2.5版本新增了一种写法可以解决此问题,写法:li[N],N代表第几个元素,从0开始,0代表第一个元素,1代表第二个元素,以此类推 如下图:
第1个元素:li[0] 第2个元素:li[1] …… 第N个元素:li[N-1]
DOM写法实战用DOM规则获取文章列表链接获取链接列表稍微和获取标题,内容等不同,分为两行,第一行是列表的获取规则,第二行设置a标签的属性 示例一: 源代码如下图:
获取规则如图:
示例二:
以获取腾讯新闻列表链接为例,网址: http://ent.qq.com/l/newxw/dalustar/list20100525165330.htm 分析结构,如下图:
结构比较简单,我们可以这样写: ul.list01 li
a 测试截图:
此外,写法并不是唯一的,只要满足条件之一就能找到列表 如这个写法也能获取到列表: ul.font_s_14 li
a 下面这个写法也同样可以获取到链接: ul[class=list01 font_s_14 line_h_25] li
a 用dom获取文章标题和内容举腾讯的这篇文章http://ent.qq.com/a/20120306/000127.htm为例子 分析结构如图:
dom写法是: div.hd h1 大家可以在采集器中测试一下,为节省版面,我就不截图了 。 内容的获取和标题一样的写法,在此不再累赘。 |