Php 使用QueryPath获取任意HTML元素的内容
我正在使用PHP QueryPath库从旧HTML文件集合中提取数据,并且在很大程度上使用了通过find()函数提供的CSS选择器来提取数据。然而,并不是所有包含我需要提取的数据的元素都有唯一的CSS标识符,所以我一直在使用一个丑陋的Regexp和QueryPath组合来提取数据Php 使用QueryPath获取任意HTML元素的内容,php,html-parsing,querypath,Php,Html Parsing,Querypath,我正在使用PHP QueryPath库从旧HTML文件集合中提取数据,并且在很大程度上使用了通过find()函数提供的CSS选择器来提取数据。然而,并不是所有包含我需要提取的数据的元素都有唯一的CSS标识符,所以我一直在使用一个丑陋的Regexp和QueryPath组合来提取数据 <ul class="list><li>Data1</li><li>Data2</li></ul> 获取可以使用的第n个匹配对象。获取可以使用的
<ul class="list><li>Data1</li><li>Data2</li></ul>
获取可以使用的第n个匹配对象。获取可以使用的第n个匹配对象。实际上有几种方法。最简单的方法是使用css3pseduclass:nth-of-type()
。这将直接获得UL内部的第二个LI:
qp($html, 'ul>li:nth-of-type(2)');
:第n种类型
和其他CSS 3选择器采用所谓的“an+b”规则,在该规则中,您可以说出一个组中有多少项,然后说出您想要的组中的哪些项。例如,tr:nth类型(4n+2)
将表行分成4个组,然后返回每个组中的第二个元素:偶数和奇数只是2n
和2n+1
的简写
其他可能值得研究的CSS:
- “:n”
- “:类型的第一个”,“类型的第一个”
- “:类型的最后一个,”:最后一个”
- ':偶数',':奇数'
- “:not()”、“:has()”和“:contains()
您还可以获取所有LI元素,然后仅获取第二个元素:
qp($html, 'li')->eq(2);
或者,正如前面的海报所指出的,您可以使用get()
,为第二个对象获取实际的DOMNode
对象:
如果您有非常复杂的需求,可以使用filter()
获取一个列表,并通过自定义函数运行它。实际上有几种方法可以做到这一点。最简单的方法是使用css3pseduclass:nth-of-type()
。这将直接获得UL内部的第二个LI:
qp($html, 'ul>li:nth-of-type(2)');
:第n种类型
和其他CSS 3选择器采用所谓的“an+b”规则,在该规则中,您可以说出一个组中有多少项,然后说出您想要的组中的哪些项。例如,tr:nth类型(4n+2)
将表行分成4个组,然后返回每个组中的第二个元素:偶数和奇数只是2n
和2n+1
的简写
其他可能值得研究的CSS:
- “:n”
- “:类型的第一个”,“类型的第一个”
- “:类型的最后一个,”:最后一个”
- ':偶数',':奇数'
- “:not()”、“:has()”和“:contains()
您还可以获取所有LI元素,然后仅获取第二个元素:
qp($html, 'li')->eq(2);
或者,正如前面的海报所指出的,您可以使用get()
,为第二个对象获取实际的DOMNode
对象:
如果您有非常复杂的需求,可以使用filter()
获取列表,并通过自定义函数运行它