分为两部分问题,但也许一个回答另一个问题.我正试图从中得到一条信息
<div id="foo">
<div class="bar"><a data1="xxxx" data2="xxxx" href="http://foo.bar">Inner text"</a>
<div class="bar2"><a data3="xxxx" data4="xxxx" href="http://foo.bar">more text"</a>
Run Code Online (Sandbox Code Playgroud)
这是我现在正在使用的.
$articles = array();
$html=file_get_html('http://foo.bar');
foreach($html->find('div[class=bar] a') as $a){
$articles[] = array($a->href,$a->innertext);
}
Run Code Online (Sandbox Code Playgroud)
这非常适合从第一个div类中获取href和内部文本.我尝试在foreach中添加$ a-> data1,但这不起作用.
如何在抓取href和innertext的同时抓取那些内部数据标签.
还有一种方法可以让两个类都有一个语句吗?我假设我可以构建id的查找并获取所有div信息.
谢谢
erm*_*nob 14
要获取所有这些属性,您应该在调查已解析的元素之前,如下所示:
foreach($html->find('div[class=bar] a') as $a){
var_dump($a->attr);
}
Run Code Online (Sandbox Code Playgroud)
...并查看这些属性是否存在.它们似乎不是有效的HTML,因此解析器可能会丢弃它们.
如果存在,您可以这样阅读:
foreach($html->find('div[class=bar] a') as $a){
$article = array($a->href, $a->innertext);
if (isset($a->attr['data1'])) {
$article['data1'] = $a->attr['data1'];
}
if (isset($a->attr['data2'])) {
$article['data2'] = $a->attr['data2'];
}
//...
$articles[] = $article;
}
Run Code Online (Sandbox Code Playgroud)
要获得这两个类,您可以使用以逗号分隔的多重选择器:
foreach($html->find('div[class=bar] a, div[class=bar2] a') as $a){
...
Run Code Online (Sandbox Code Playgroud)
我知道这个问题很老,但是 OP 询问他们如何在一个语句中获取所有属性。我只是为我正在做的一个项目做这件事。
您可以使用该getAllAttributes()
方法获取元素的所有属性。结果会自动存储在名为 的数组属性中attr
。
在下面的示例中,我抓取了所有链接,但您可以随心所欲地使用它。注意:这也适用于data-
属性。因此,如果有一个被调用的属性data-url
,则$e->attr['data-url']
在您运行该getAllAttributes
方法后将可以访问它。
在您的情况下,您要查找的属性将是$e->attr['data1']
和$e->attr['data2']
。希望这可以帮助某人,如果不是 OP。
获取所有属性
$html = file_get_html('somefile.html');
foreach ($html->find('a') as $e) { //used a tag here, but use whatever you want
$e->getAllAttributes();
//testing that it worked
print_r($e->attr);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
34171 次 |
最近记录: |