【问题标题】:How to get the HTML code for a webpage after it is fully loaded in php?php完全加载后如何获取网页的HTML代码?
【发布时间】:2021-12-05 11:08:34
【问题描述】:

我正在尝试获取任何网页的 HTML 代码,只有在它完全加载之后。

我尝试了 CURL 和 file_get_contents,现在我知道它们不会等待 JavaScript 完成。

我现在知道解决方案是使用无头浏览器。我尝试了 PhantomJS,但它的效率有点低,因为找到让它等待的唯一方法是设置一个恒定的超时时间。

另外,我发现一般来说,几乎不可能获得页面实际完全加载的时间,最好的方法是不断检查网络数据,直到它们完全停止。

我相信继续检查页面中是否存在内容,这对我的使用来说效果很好,但据我所知,实现它的唯一方法是使用 puppeteer 包,它只适用于 NodeJS不是 PHP。

那么,你们知道有什么有效的方法,在PHP中完全加载页面后,无需经过集成其他编程语言或其他平台的复杂过程即可获取HTML代码吗?

【问题讨论】:

  • 不幸的是,对此没有一个简单的答案:“完全加载”没有单一的定义,并且没有实际运行现代浏览器就无法模拟现代浏览器的全部功能.
  • 我明白了。由于我找到的所有线程都是几年前的,所以我认为随着时间的推移有些事情发生了变化。尽管如此,我还是很乐观,我觉得有人会揭示隐藏的天才方法来回答我的问题
  • 抱歉,这个没有魔杖。如果有的话,浏览器会变得越来越复杂,所以它会越来越难。唯一简单的出路是挑战前提:您真的需要页面的 HTML,还是在其他地方可以获得所需的数据?您真的需要一个通用解决方案,还是您可以为您要抓取的特定网站手动破解一些东西?
  • 许多美国网站和世界各地的网站都使用 Ajax。我不认为国籍比较有用。它也与问题无关。您可能需要一个可以自动化无头浏览器的解决方案。
  • 即使您有 10 个不同的网站要抓取,但依次查看每个网站并找到获取所需数据的最佳方式可能会更容易。也许您可以直接模拟其中一个 AJAX 调用,而不是从 HTML 中抓取它;也许您可以触发使用较少 AJAX 且更易于使用的后备视图;等等。但是,如果您确实需要运行 JavaScript,那么您已经知道答案了——使用无头浏览器——没有什么好说的了。

标签: php jquery api web-scraping headless


【解决方案1】:

我认为您无法使用 PHP 来完成它,因为它不是浏览器并且无法运行 JavaScript。您可以使用Headless Chromium 之类的方法并执行chrome --headless --disable-gpu --dump-dom https://www.chromestatus.com/ 之类的操作,遗憾的是无法准确判断它何时“完全加载”,但我敢肯定,您可以在某种类型的延迟上做到这一点。

【讨论】:

  • 我已经尝试执行该操作。它的工作原理与 PhantomJS 完全一样。不幸的是,处理恒定的时间延迟是低效的。有时延迟不足以使页面完全加载,而在其余时间,它只是增加了执行时间而没有必要。
【解决方案2】:

Mb 类似于在页面加载完成时设置 JS 以获取所有页面内容到变量,然后通过 Ajax 将该变量发送到 php 脚本?

【讨论】:

    猜你喜欢
    • 2019-09-01
    • 2014-11-13
    • 1970-01-01
    • 2014-08-09
    • 2010-10-23
    • 2012-02-27
    • 1970-01-01
    • 2017-04-11
    • 1970-01-01
    相关资源
    最近更新 更多