两部分问题的排序,但也许一个回答另一个问题。我正试图从中得到一条信息
<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和内部文本。我尝试在foreach中添加$ a-&gt; data1,但这不起作用。
如何在抓取href和innertext的同时抓取那些内部数据标签。
还有一种方法可以让两个类都有一个语句吗?我假设我可以构建id的查找并获取所有div信息。
由于
答案 0 :(得分:12)
要获取所有这些属性,您应该先调查已解析的元素,如下所示:
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){
...
答案 1 :(得分:2)
我知道这个问题已经过时了,但是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);
}
答案 2 :(得分:0)
检查此代码
<?php
$html = file_get_html('somefile.html');
foreach ($html->find('a') as $e) {
$filter = $e->getAttribute('data-filter-string');
}
?>
答案 3 :(得分:0)
$data1 = $html->find('.bar > a', 0)->attr['data1'];
$data2 = $html->find('.bar > a', 0)->attr['data2'];