如何使用Goutte

scr*_*fix 10 screen-scraping web-crawler goutte

问题:
无法完全理解Goutte网络刮刀.

请求:
有人可以帮助我理解或提供代码,以帮助我更好地了解如何使用Goutte网络刮刀吗?我已经阅读了README.md.我正在寻找比提供的更多信息,例如Goutte中可用的选项以及如何编写这些选项,或者当您查看表单时,您是否搜索表单的名称=或id =?

试图抓取的网页布局:
步骤1:
网页有一个表单,有一个单选按钮,可以选择填写哪种表格(即名称或许可证).默认情况下,名称带有名字和姓氏文本框以及状态下拉菜单选择列表.如果选择Radio,则会有jQuery或JavaScript使First和Last Name文本框消失,并显示License文本框.

第2步:
成功提交表单后,它会将您带到一个包含多个链接的页面.我们可以进入其中一个来获取我们需要的信息.

第3步:
一旦我们成功点击链接,我们希望第三页包含我们正在寻找的数据,并且我们希望将该数据存储到php变量中.

提交错误信息:
如果提交了错误信息,则jQuery/Javascript返回"未找到记录"消息.与提交的页面相同.

注意:
首选方法是选择许可证单选按钮,填写许可证编号,选择状态,然后提交表单.我已经阅读了大量关于Goutte的帖子和博客以及其他项目,我无处可以找到Goutte可用的选项,如何找到这些信息或如果它存在的话如何使用这些信息.

One*_*ema 16

您要查看的文档是Symfony2 DomCrawler.

Goutte是一个基于Guzzle的客户端构建,每次请求/提交内容时都会返回Crawlers:

use Goutte\Client;
$client = new Client();
$crawler = $client->request('GET', 'http://www.symfony-project.org/');
Run Code Online (Sandbox Code Playgroud)

使用此爬虫,您可以执行诸如获取正文中的所有P标记之类的内容:

$nodeValues = $crawler->filter('body > p')->each(function (Crawler $node, $i) {
    return $node->text();
});
print_r($nodeValues);
Run Code Online (Sandbox Code Playgroud)

填写并提交表格:

$form = $crawler->selectButton('sign in')->form(); 
$crawler = $client->submit($form, array(
        'username' => 'username', 
        'password' => 'xxxxxx'
));
Run Code Online (Sandbox Code Playgroud)

Crawler上有一个selectButton()方法,它返回另一个Crawler,它与给定文本的按钮(input [type = submit],input [type = image]或按钮)相匹配.[ 1 ]

您单击链接或设置选项,选择复选框等,请参阅表单和链接支持.

要从爬网程序获取数据,请使用htmltext方法

echo $crawler->html();
echo $crawler->text();
Run Code Online (Sandbox Code Playgroud)