【问题标题】:PHP web scraping - return content after javascript loadsPHP网页抓取 - javascript加载后返回内容
【发布时间】:2017-02-02 13:48:25
【问题描述】:

我正在创建一个爬取网站、登录帐户并访问用户旅行信息的应用程序。

登录并转到显示旅行卡列表的页面后,我需要单击View journey history 链接。

所以问题出在这里:View journey history 链接只有在加载 Javascript 脚本后才会出现在页面上(我不太确定是哪个)。当我运行我的爬虫脚本并打印此页面时,我可以查看View journey history 链接(因为它会在浏览器上加载 javascript)。但是,当我尝试抓取此页面以查找此链接时,它没有找到它。我的假设是这个 PHP 库没有在后端运行 javascript(一种浏览器端语言)的设施。

在加载和处理完所有 javascript 脚本后,如何返回页面 html?

我正在使用Goutte 进行抓取。这个库使用Symfony BrowserKit,它应该模拟网络浏览器的行为,最好知道它是否有在返回 html 之前处理 javascript 的工具。

我对任何类型的解决方案都持开放态度,这意味着使用不同的库,甚至是不同的编程语言。

提前致谢。

【问题讨论】:

    标签: php laravel symfony web-scraping goutte


    【解决方案1】:

    我为Laravel 自定义了curl package

    登录后,您需要密切监视请求[使用Google Chrome's网络选项卡。]。

    有几种情况。

    1) 网站正在向其他网址发送ajax request。您需要捕获该url 并将ajax request 发送到该url 以获取数据。

    2) 网站正在使用javascript 呈现页面数据。在这种情况下,数据将已嵌入页面源[js 代码]。您需要使用regex从页面中提取数据。

    我只能提供这么多帮助,而无需分析调用、页面来源。

    【讨论】:

    • 选项 1 为我节省了 $$。谢谢
    • 很高兴有帮助:)
    【解决方案2】:

    BrowserKit 和 PHP 本身不具备执行 JavaScript 的能力。不过有一些选择;你可以使用 Selenium 和 WebDriver 或 PhatomJS 之类的东西,并使用 Codeception 之类的东西(它实际上是一个测试库,但可以用于抓取)来自动化操作:

    http://codeception.com/docs/modules/WebDriver

    这里的缺点是这种方法很慢,并且可能与您在其上运行脚本的任何硬件(即没有 GUI 或浏览器的 Web 服务器)不兼容。

    另一种方法是使用比 Selenium 和 WebDriver 更快、更轻量级的 ChromeDriver。然后,您可以使用 Laravel Dusk 自动化所有这些(同样,另一个测试库,但非常适合这种事情):

    https://laravel.com/docs/master/dusk

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-24
      • 2020-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-03
      • 2010-10-09
      相关资源
      最近更新 更多