如果数据是通过Javascript加载的,如何使用php Goutte和Guzzle进行爬行?

2023-11-26

很多时候,当爬行时,我们会遇到这样的问题:页面上呈现的内容是用 Javascript 生成的,因此 scrapy 无法爬行它(例如 ajax 请求、jQuery)


你想看看 phantomjs。有这个 php 实现:

http://jonnnnyw.github.io/php-phantomjs/

当然,如果你需要让它与 php 一起工作。

您可以阅读该页面,然后将内容提供给 Guzzle,以便使用 Guzzle 为您提供的出色功能(例如搜索内容等)。这取决于您的需求,也许您可​​以简单地使用 dom,如下所示:

如何通过类名获取元素?

这是一些工作代码。

  $content = $this->getHeadlessReponse($url);
  $this->crawler->addContent($this->getHeadlessReponse($url));

  /**
   * Get response using a headless browser (phantom in this case).
   *
   * @param $url
   *   URL to fetch headless
   *
   * @return string
   *   Response.
   */
public function getHeadlessReponse($url) {
    // Fetch with phamtomjs
    $phantomClient = PhantomClient::getInstance();
    // and feed into the crawler.
    $request = $phantomClient->getMessageFactory()->createRequest($url, 'GET');

    /**
     * @see JonnyW\PhantomJs\Http\Response
     **/
    $response = $phantomClient->getMessageFactory()->createResponse();

    // Send the request
    $phantomClient->send($request, $response);

    if($response->getStatus() === 200) {
        // Dump the requested page content
        return $response->getContent();
    }

}

使用 phantom 的唯一缺点是,它会比 guzzle 慢,但是当然,你必须等待所有那些讨厌的 js 加载完毕。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果数据是通过Javascript加载的,如何使用php Goutte和Guzzle进行爬行? 的相关文章

  • Android GCM 服务器的 API 密钥

    我有点困惑我应该为 GCM 服务器使用哪个 API 密钥 在文档中它说使用 android api 密钥 这对我不起作用并且总是给出未经授权的 http developer android com google gcm gs html ht
  • 将 MySQL 结果作为 PHP 数组

    mysql 表 config name config value allow autologin 1 allow md5 0 当前的 php 代码 sth mysql query SELECT rows array while r mysq
  • Zend Framework Zend_Form 装饰器: 位于按钮元素内部?

    我有一个像这样创建的按钮元素 submit new Zend Form Element Button submit submit gt setLabel My Button submit gt setDecorators array Vie
  • 如何在 codeigniter 查询中使用 FIND_IN_SET?

    array array classesID gt 6 this gt db gt select gt from this gt table name gt where array gt order by this gt order by q
  • PHPUnit\Framework\TestCase 和 Tests\TestCase 有什么区别?

    我注意到在示例测试中 这两个类是内置的 功能测试 gt use Tests TestCase 单元测试 gt PHPUnit Framework TestCase 两者有什么区别 在什么情况下您会使用其中一种 PHPUnit Framewo
  • 如何将粘在一起的单词分开?

    我有很多命名不好的文件 videoofmegoingtoschool avi 是否有一个库或某种算法可以正确地将其分离 video of me going to school avi 我不认为那里有什么 我可以想象一个程序 它使用单词词典并
  • 如何在 WordPress 中按类别获取所有帖子

    我想在 WordPress 中按类别获取帖子 args array post type gt project postslist get posts args 0 gt WP Post 对象 ID gt 421 post author gt
  • 来自本地 XML 的模拟 SoapClient 响应

    我想用文件中的 XML 来模拟 SoapClient 的响应 我如何创建一个 stdClass 对象 就像 SoapClient 从文件返回一样 客户端已经包装了 SoapClient 因此可以轻松模拟响应 我的模拟是这样的 soapCli
  • 如何处理 AJAX 请求中的会话超时

    我相信你们都熟悉使用 AJAX 的投票系统 嗯 看那边 我有类似的东西 当你投票赞成或反对时 它使用 AJAX 从 votes php 请求新值 问题是我正在使用会话来获取用户 ID 因此一个人只能投票一次 如果他们在页面上坐了一个小时然后
  • Doctrine 1 和 Symfony 1 的多个主键?

    我已经知道在 Symfony 1 和 Doctrine 1 中不可能使用多个主键 但是你们知道有什么好的解决方法吗 除了多对多关系之外 原则 1 不适用于多列上的主键 但如果你想使用多对多关系 请像这样使用 BlogPost columns
  • 模拟/存根在 PHPUnit 中实现 arrayaccess 的类的对象

    这是我正在为其编写测试套件的类的构造函数 它扩展了 mysqli function construct Config c store config file this gt config c do mysqli constructor pa
  • 选取散列第 N 个元素的最快方法

    我有一个大哈希表 带有字符串索引的数组 并正在寻找一个函数quickly从中选取第一个 理想情况下也是第 N 个 元素 array shift and reset 对于我的需求来说太慢了 UPDATE 我也不是在寻找基于引用的解决方案 该函
  • PHP 错误警告:参数 1 应该是引用

    我 熟悉 PHP 我的朋友的网站因错误而崩溃 Warning Parameter 1 to Some function name expected to be a reference value given in public html i
  • phpinfo 说 php.ini 路径是 C:\Windows 但那里没有 php.ini

    我们正在尝试从 PHP5 切换到 PHP7 现在我们已经安装了 Apache 并且 PHP 可以运行了 然而 我们在php ini文件没有任何作用 Via phpinfo 我们意识到原因是Configuration File php ini
  • magento成功页面变量

    我正在尝试捕获一些 magento 成功页面变量以传递给我们的广告公司 到目前为止 我已经得到了这个 但变量没有输出任何内容 数据需要采用以下格式 price1 price2 price3 qty1 qty2 qty3 sku1 sku2
  • wordpress - 像 stackoverflow 中那样内嵌 ajax 注释

    我有一个 WordPress 博客 希望为人们提供与 stackoverflow 中添加评论相同的用户体验 有很多评论 ajax 插件 但我找不到一个可以使用的插件 它允许您在主页上内联 进入并添加评论 而无需先深入到单独的单个帖子页面 任
  • 接口中的构造方法

    接口中的构造方法不好吗 为什么人们认为有人想要实例化接口 我们想要做的是强制实现者实现构造函数 就像其他接口方法一样 接口就像一个合同 假设我有一个接口 Queue 并且我想确保实现者创建一个带有一个参数的构造函数 该构造函数创建一个单例队
  • 显式删除会话cookie会产生什么影响?

    我使用 php session 来维护用户的会话 Session 在登录后创建 在注销或超时后销毁 我需要管理面板中的一个选项来强制注销任何用户 如果他在网站上处于活动状态 我怎样才能做到这一点 我正在考虑删除临时会话文件 这应该有效地破坏
  • 合并 url 中的 2 个输入值

    我有这样的形式
  • 如何使用配置文件 (.ebextensions) 在 AWS Elastic Beanstalk 上安装 PHP IMAP 扩展?

    有谁知道如何使用配置文件 ebextensions 在 AWS Elastic Beanstalk 上安装和启用 PHP IMAP 扩展 我使用的是 64 位 Amazon Linux 2017 03 v2 4 0 运行 PHP 7 0 1

随机推荐

  • Redis 获取大字符串很慢

    我是 Redis 的新手 所以如果这是一个愚蠢的问题 我深表歉意 我使用 Django 和 Redis 作为缓存 我正在腌制大约 200 个对象的集合并将其存储在 Redis 中 当我从 Redis 请求集合时 Django 调试工具栏通知
  • 带有固定包装器的引导网格 - 防止列堆叠

    正如标题所示 我正在尝试使用带有固定包装器的 Bootstrap 3 网格系统 但是 当我调整浏览器的大小时 即使包装器保持相同的大小 列也会堆积起来 顺便说一句 我正在使用版本 3 以便在移植网站后可以转向响应式布局 这是巨大的 而且我独
  • 使用 Snapshot 和 ParamMap 的 Angular Mock ActivatedRoute

    我正在使用这个 来自here constructor private heroService HeroService private activatedRoute ActivatedRoute ngOnInit const heroId t
  • 如何使用 JBoss 4.2.3 以编程方式找出我的 jboss 服务器正在侦听哪个端口?

    例如 如何确定我的简单 JBoss 4 2 3 服务器正在侦听端口 8080 这是我能达到的最接近的结果 但这不起作用 MBeanServerConnection server MBeanServerConnection new Initi
  • 量化约束与(封闭)类型族

    我正在尝试使用这篇博文的方法是在不悬而未决的情况下获取更高级的数据Identity简单情况的函子与量化约束推导一起 LANGUAGE TypeFamilies LANGUAGE QuantifiedConstraints Standalon
  • UITableView 在 iOS 7 中以偏移量开始

    我已将一个简单的 UITableView 拖到 iOS 7 中的 UIViewController 上 现在 在第一个单元格开始之前有一个垂直的空间偏移 我该如何摆脱它 我希望第一行更接近 UITableView 实际开始位置的上边缘 我没
  • 使用 .NET C# 连接到 Interbase 7.1 的最佳方法

    有人可以解释一下使用 NET C 连接到 Interbase 7 1 数据库的最佳方法吗 该应用程序将安装在许多最终用户计算机上 因此我必须与应用程序打包的 附加组件 越少越好 CodeGear 为 InterBase 的注册用户提供免费的
  • 如何更改熊猫箱线图中胡须的线条样式?

    有没有办法将 pandas 箱线图中胡须的线条样式更改为 默认值似乎是 我努力了 color dict boxes black whiskers black medians red caps black styles dict whiske
  • 如何在 C# 中跨本地网络进行 UDP 多播?

    我正在尝试在我的本地网络上进行一些简单的 UDP 通信 我想做的就是对网络上的所有机器进行多播 这是我的发送代码 public void SendMessage string message var data Encoding Defaul
  • c# - 如何将点移动给定距离 d (并获取新坐标)

    你好 我想知道是否有任何有效的方法来计算点的坐标 从原始位置移动了距离 d 假设我有一个点 P 0 3 0 5 我需要将该点随机方向移动距离 d 到目前为止 我通过随机选取新的 x 和 y 坐标来完成此操作 并且检查新旧点之间的距离是否等于
  • 经典 ASP - 捕获 500 错误

    我正在尝试诊断一个网站的问题 该网站似乎在代码中的某个地方抛出了错误 从错误日志来看 这似乎是由于 SQL 查询与错误代码的错误串联而导致的 SQL 语法错误 我的问题是 我无法重现该错误 但客户仍然收到该错误 这可能是由许多查询引起的 所
  • 在 R 中手动构建逻辑回归模型进行预测

    我正在尝试在数据集上测试逻辑回归模型 例如 3 个预测变量 X1 X2 X3 的 3 个系数 我知道如何在创建模型对象后测试模型 例如 mymodel lt glm Outcome X1 X2 X3 family binomial data
  • Axios 与promise.prototype.finally 不起作用

    不知道我错过了什么 按照此处的说明进行操作 https github com mzabriskie axios blob master COOKBOOK md 我已经安装了 axios 和 npmnpm install axios prom
  • 如何使用 LINQ C# 正确搜索 xml 文档

    我很难弄清楚如何正确搜索 xml 文档 我今天疯狂地阅读其他表格 但似乎无法理解 希望有人能给我一些更详细的信息 告诉我如何正确执行此操作以及为什么使用 LINQ 这是 XML 文件
  • 克隆 Sublime Text 3 高亮语法定义

    是否有一个简单的过程可以从现有的定义中派生出您自己的自定义 Sublime Text 3 突出显示定义 我已经安装了AAAPackageDev正如推荐的有序且略显繁琐创建新的突出显示语法定义的教程 但我发现克隆一个会让我进展得更快 至少 我
  • Freemarker 中的 Java.time (Java 8) 支持

    有人知道 FreeMarker 有支持新 java time api 的计划吗 或者是否有任何代码可以支持 ZonedDateTime LocalDateTime 和 Instant 等类 自己实现这些东西并不难 但实际上是一个相当大的任务
  • git add 抛出警告“CRLF 将被 <文件名> 中的 LF 替换”

    我最近开始从事 Xamarin 跨平台开发工作 虽然我团队中的一些开发人员使用 Mac 进行开发 使用 Visual Studio for Mac 但其他开发人员使用 Windows 使用 Visual Studio 2017 我们使用 g
  • Java/Android HttpURLConnection setChunkedStreamingMode 不适用于所有 PHP 服务器

    我花了大约一天的时间试图调试这个问题 但我没有想法 基本上我有一个 Android 应用程序将一些数据发布到 PHP Apache Web 服务器 当我将其指向本地测试服务器时 该代码似乎工作正常 当我将它指向我的生产服务器时 它似乎也工作
  • 当父容器调整大小时,自动调整 dojo dijit.Grid 小部件的大小

    我在 TitlePane 中有一个 dojo Grid 小部件 其宽度设置为 100 TitlePane 采用液体布局 因此其宽度随浏览器窗口大小而变化 我遇到的问题是 当父窗口扩展 或收缩 时 网格本身不会改变它的宽度 我可以通过在网格上
  • 如果数据是通过Javascript加载的,如何使用php Goutte和Guzzle进行爬行?

    很多时候 当爬行时 我们会遇到这样的问题 页面上呈现的内容是用 Javascript 生成的 因此 scrapy 无法爬行它 例如 ajax 请求 jQuery 你想看看 phantomjs 有这个 php 实现 http jonnnnyw