我正在使用简单的 html dom来查找特定页面上的链接:
// Find all links
foreach($html->find('a') as $element)
echo $element->href . '<br>';
这会找到页面上的所有链接,但是我也希望能够找到找到的链接,并递归地在这些找到的链接中找到链接,例如到第 5 级。
知道该怎么做吗?
我正在使用简单的 html dom来查找特定页面上的链接:
// Find all links
foreach($html->find('a') as $element)
echo $element->href . '<br>';
这会找到页面上的所有链接,但是我也希望能够找到找到的链接,并递归地在这些找到的链接中找到链接,例如到第 5 级。
知道该怎么做吗?
使用递归函数并跟踪深度:
function findLinks($url, $depth, $maxDepth) {
// fetch $url and parse it
// ...
if ($depth <= $maxDepth)
foreach($html->find('a') as $element)
findLinks($element->href, $depth + 1, $maxDepth);
}
你会从调用类似的东西开始findLinks($rootUrl, 1, 5)
。
过去我确实需要类似的功能。您可以做的是使用 mysql 来存储您的链接。
就我而言,我有一个todo表和一个pages表。在你的待办事项表中添加一些你想要抓取的 url。
我以前做的是获取我需要的页面信息(明文和标题)并将其存储在 mysql db pages中。然后我曾经循环遍历链接并将它们添加到待办事项表中。最后一步是从我的待办事项列表中删除当前页面然后循环..
grab a url from todo loop
{
get current page title and plaintext store it in pages table
loop through links Add found links to todo table
remove current page from todo
}