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

时间:2015-03-18 08:49:21

标签: php html web-crawler goutte

我想网上抓几个网站,显然是用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完成的,那么,有没有人知道如何抓取这些类型的网站?

2 个答案:

答案 0 :(得分:2)

这个网站已经加入了一个懒惰的Google自定义搜索网站#34;而不是实现自己的,这意味着该网站带有各种JavaScript cruft。

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

我认为你有几个选择:

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

答案 1 :(得分:0)

这是一个非常相似的问题的链接。长话短说,你需要一个支持javascript的无头浏览器:

https://stackoverflow.com/a/45212818/1038178