简单的 HTML DOM,递归查找链接

发布于 2024-10-15 12:43:44 字数 331 浏览 1 评论 0原文

我正在使用 simple html dom 来查找某个页面上的链接:

// Find all links
foreach($html->find('a') as $element)
       echo $element->href . '<br>'; 

这将查找页面上的所有链接,不过我希望能够找到找到的链接 以及递归地在这些找到的链接内部查找链接,例如到级别 5。

知道如何进行吗?

I am using simple html dom to find links on a certain page using:

// Find all links
foreach($html->find('a') as $element)
       echo $element->href . '<br>'; 

This find all the links on the page, however i want to be able to go to found links
as well and find links inside those found links recursively for example to level 5.

Any idea of how to go about?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

屋檐 2024-10-22 12:43:44

使用递归函数并跟踪深度:

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) 之类的函数。

Use a recursive function and keep track of the depth:

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);
}

And you would start by calling something like findLinks($rootUrl, 1, 5).

梦开始←不甜 2024-10-22 12:43:44

过去我确实需要类似的功能。你可以做的就是使用 mysql 来存储你的链接。

就我而言,我有一个 todo 表和一个 pages 表。在您的 todo 表中添加您想要抓取的一些 url。

我过去所做的就是获取我需要的页面信息(纯文本和标题)并将其存储在 mysql 数据库 pages 中。然后我经常循环访问链接并将它们添加到 todo 表中。最后一步是从我的待办事项列表中删除当前页面,然后循环......

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 
}

In the past I did need a similar feature. What you can do is use mysql to store your links.

In my case I had a todo table and a pages table. Seed your todo table with some url's you want to spider.

What I used to do was to get the page info I need (plaintext and title) and store this in a mysql db pages. Then I used to loop through the links and add them to the todo table. The last step was to remove the current page from my todo list then loop over..

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 
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文