是否可以使用 Goutte/PHP 抓取基于 JavaScript 的网站?

问题描述 投票:0回答:2

我想抓取几个网站,这些网站显然是使用 JavaScript 渲染的。具体来说,我想定位这个网站:http://cve.mitre.org/find/index.html

这是我的代码:

$client = new Client();

$crawler = $client->request('GET', 'http://cve.mitre.org/find/index.html');
$form = $crawler->selectButton('Search')->form();
$crawler = $client->submit($form, array('search' => 'Symphony'));

print $crawler->html();

如果我查看源代码,我看不到 HTML,因为这个请求是由 JavaScript 完成的,所以,有人知道如何抓取此类网站吗?

php html web-crawler goutte
2个回答
3
投票

该网站采用了懒惰的“Google 自定义搜索”,而不是实现自己的搜索,这意味着该网站带有各种 JavaScript 缺陷。

看起来实际的搜索可能是通过传统的表单提交来完成的,您只需要使用 Google 呈现的元素发布到表单即可。然而,这可能没那么容易,因为谷歌可能会检查引荐来源网址等,并无论如何都会阻止它。

我认为你有几个选择:

  • 使用 PhantomJS 等无头浏览器来运行搜索。你可以尝试直接驱动它,或者使用像Spiderling这样的东西。这肯定会起作用,但它比运行像 Goutte 这样的简单浏览器要慢一些,并且需要管理员权限才能在服务器上运行
  • 酌情使用
    domain:cve.mitre.org
    直接抓取 Google
  • 注册 Google 搜索 API 并直接使用它
  • 尝试将所需的表单注入 Goutte 并将表单提交给 Google(在尝试之前很难知道它是否有效)

0
投票

尝试一下这个 PHP 库 https://github.com/minkphp/Mink

© www.soinside.com 2019 - 2024. All rights reserved.