【问题标题】:simple html DOM cant see all hrefs简单的 html DOM 看不到所有的 href
【发布时间】:2016-02-15 19:36:30
【问题描述】:

我正在尝试检索某个网站的 youtube 链接。但是当使用简单的 html DOM 解析器时,它无法找到我正在寻找的链接。

$new_html = file_get_html("https://www.bia2.com/video/Amir-Shamloo/Delam-Tange/");
    foreach ($new_html->find('href') as $youtube) {
    echo $youtube;
}

它应该会找到链接:https://www.youtube.com/watch?v=vJ2aNG0aJPU

有人知道这里有什么问题吗?

【问题讨论】:

  • 该 youtube 链接似乎没有出现在源代码中。
  • 这也可能因为无效的html而失败
  • 如果是嵌入式视频,它可能会使用这样的链接:youtube.com/embed/vJ2aNG0aJPU not the watch?v= version。

标签: php html simple-html-dom


【解决方案1】:

该特定链接是在 onload 事件期间通过 JavaScript 通过 onYouTubeIframeAPIReady("vJ2aNG0aJPU") 插入的。

SimpleHtmlDom(或任何其他基于 PHP 的 HTML 解析器)不会执行任何 JavaScript。他们只是解析网络服务器返回的标记。

您需要一个能够执行 Javascript 的抓取器才能抓取它。或者您可以将参数与该函数匹配并自己组装链接。

附带说明:$new_html->find('href') 将尝试查找任何名为“href”的元素,这显然是错误的。要获取任何元素的所有 href 属性,您必须改用 *[href]

另一方面不是:SimpleHtmlDom 是一个垃圾库。考虑您的选择:

【讨论】:

  • 看来这确实是问题所在。
  • 我正在四处寻找可以帮助我但无法真正找到的东西。在我的简单 dom 解析器检索到 href 之前,你知道什么可以执行 js
  • @wouter.lilopel 不在 PHP 中。您可能需要改用 nodejs 解决方案 (phantomjs.org)。或者您只需按照建议匹配 ID。
  • 匹配ID是什么意思,能举个例子吗?
  • preg_match_all 仍然有点令人困惑,我试图为bia2.com/video 做同样的事情,但我试图获取我使用的不同视频页面的链接'#a href= "/video/(.*)"#' 但我得到了一些我不想要的额外内容
猜你喜欢
  • 2016-01-24
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
  • 2018-03-23
  • 2018-02-21
  • 2015-02-19
  • 2015-10-01
  • 2012-06-24
相关资源
最近更新 更多