Php 使用简单的HTMLDOM进行刮取?
SimpleHTMLDOM基本上是一个php,你可以添加到你的网页,让你有简单的网页抓取。这在很大程度上是好的,但我不能理解手册,因为我不是一个程序员。是否有任何网站/指南对此有更简单的帮助?(php.net上的这个问题目前对我来说有点太复杂了)有没有更好的地方可以问这样的问题 该网站位于: 我可以刮取有特定类的东西,比如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
,但不能刮取介于两者之间的东西。例如这就是我目前使用的
$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;
}
}