Php 使用简单的HTMLDOM进行刮取?

Php 使用简单的HTMLDOM进行刮取?,php,dom,loops,simple-html-dom,scrape,Php,Dom,Loops,Simple Html Dom,Scrape,SimpleHTMLDOM基本上是一个php,你可以添加到你的网页,让你有简单的网页抓取。这在很大程度上是好的,但我不能理解手册,因为我不是一个程序员。是否有任何网站/指南对此有更简单的帮助?(php.net上的这个问题目前对我来说有点太复杂了)有没有更好的地方可以问这样的问题 该网站位于: 我可以刮取有特定类的东西,比如,但不能刮取介于两者之间的东西。例如这就是我目前使用的 $url = 'http://www.test.com'; $html = file_get_html($url); f

SimpleHTMLDOM基本上是一个php,你可以添加到你的网页,让你有简单的网页抓取。这在很大程度上是好的,但我不能理解手册,因为我不是一个程序员。是否有任何网站/指南对此有更简单的帮助?(php.net上的这个问题目前对我来说有点太复杂了)有没有更好的地方可以问这样的问题

该网站位于:

我可以刮取有特定类的东西,比如
,但不能刮取介于两者之间的东西。例如这就是我目前使用的

$url = 'http://www.test.com';
$html = file_get_html($url);
foreach($html->find('tr[class=group]') as $result)
  {
    $first = $result->find('td[class=category1]',0);
    $second = $result->find('td[class=category2]',0);
    echo $first.$second;
  }
}
但这是我正在努力拼凑的代码

<table>
  <tr class="Group">
    <td>
      <dl class="Summary">
        <dt>Heading 1</dt>
          <dd><a href="#123" class="ViewProfile">Cat</a></dd>
          <dd><a href="#032" class="ViewProfile">Bacon</a></dd>
        <dt>Heading 2</dt>
          <dd><a href="#143" class="ViewProfile">Narwhal</a></dd>
          <dd><a href="#642" class="ViewProfile">Ice Soap</a></dd>
      </dl>
    </td>
  </tr>
</table>
谢谢所有能帮忙的人。抱歉,如果这不清楚或太长。理想情况下,我希望能够更多地理解这些DOM命令,因为我希望自己能够解决这一问题,而不是让这里的人去做(但我也很感激)


TL;DR:我正在尝试了解如何使用手册(上面的url)中列出的命令。“手册”还不够简单。你是如何学习这些东西的?

我认为
$result2->find('dt',0)
将返回元素
0
,这是第一个元素。如果您忽略了这一点,您应该能够得到一个数组(或节点列表)。大概是这样的:

foreach($html->find('tr[class=Summary]') as $result2)
{
    foreach ($result2->find('dt') as $node)
    {
       echo $node->innertext;
    }
}

您不需要严格地使用外部for循环,因为文档中只有1个tr。您甚至可以将它放在一起,在文档中查找每个
dt
,但是对于这样的工具,我认为灵活和严格是一件好事,因此您可以准备多行,但不要意外地从文档中的任何位置解析
dt

哇,谢谢!它不再重复了。很抱歉问了这么复杂的问题,谢谢你的帮助。文档中实际上有很多“tr”标记,但为了简单起见,我删掉了大部分。外部标记只是将其缩减到我在本例中展示的内容。我非常讨厌简单的DOM。返回的对象和数组的地狱般混合是。。。地狱般的。PHPQuery有点酷,但最终我转向了Python和Beautiful Soup来完成这类任务。是的,理想情况下我宁愿使用Python,但我必须学习一些对我来说更有用的东西。我看了PHPQuery一眼,对它既不了解也不了解。我只是希望有一个简单的方法来学习这些东西。。。或者,即使有一本书或一些我能看懂的东西。只是我的建议,因为我在学习中遇到了同样的问题,并得出结论,“简单DOM”根本不是。我认为这是非常可怕的,全心全意地建议寻找其他可能的选择。
foreach($html->find('tr[class=Summary]') as $result2)
{
    foreach ($result2->find('dt') as $node)
    {
       echo $node->innertext;
    }
}