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


Is it possible to scrape a JavaScript-based website using Goutte/PHP?

我想对几个网站进行web抓取,这些网站显然是使用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完成的,所以,有人知道如何抓取这些网站吗?

该网站采用了懒惰的"谷歌自定义搜索",而不是实现自己的搜索,这意味着该网站附带了各种JavaScript cruft。

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

我认为你有几个选择:

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