6

有点像一个两部分的问题,但也许一个回答另一个。我试图从一个

<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>

这是我现在正在使用的。

$articles = array();
$html=file_get_html('http://foo.bar');
foreach($html->find('div[class=bar] a') as $a){
    $articles[] = array($a->href,$a->innertext);
}

这可以完美地从第一个 div 类中获取 href 和内部文本。我尝试将 $a->data1 添加到 foreach ,但没有奏效。

如何在获取 href 和 innertext 的同时获取这些内部数据标签。

还有一种用一个语句来获得两个类的好方法吗?我假设我可以根据 id 建立查找并获取所有 div 信息。

谢谢

4

4 回答 4

16

要获取所有这些属性,您应该在调查解析的元素之前,如下所示:

foreach($html->find('div[class=bar] a') as $a){
  var_dump($a->attr);
}

...看看这些属性是否存在。它们似乎不是有效的 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;
}

要获取这两个类,您可以使用多个选择器,以逗号分隔:

foreach($html->find('div[class=bar] a, div[class=bar2] a') as $a){
...
于 2013-01-22T10:49:59.467 回答
5

我知道这个问题很老,但是 OP 询问他们如何在一个语句中获得所有属性。我只是为我正在做的一个项目做这个。

getAllAttributes()您可以使用该方法获取元素的所有属性。结果会自动存储在一个名为 的数组属性中attr

在下面的示例中,我抓取了所有链接,但您可以随心所欲地使用它。注意:这也适用于data-属性。因此,如果有一个名为的属性,则在您运行该方法data-url后将可以访问它。$e->attr['data-url']getAllAttributes

在您的情况下,您要查找的属性将是$e->attr['data1']and $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);
}
于 2016-09-30T03:24:03.653 回答
2
$data1 = $html->find('.bar > a', 0)->attr['data1'];
$data2 = $html->find('.bar > a', 0)->attr['data2'];
于 2019-07-17T06:03:39.713 回答
1

检查此代码

<?php
$html = file_get_html('somefile.html');
foreach ($html->find('a') as $e) { 
$filter = $e->getAttribute('data-filter-string');
}
?>
于 2017-06-29T07:31:56.277 回答