问题
无法完全理解Goutte网络刮刀。
请求
有人能帮助我理解或提供代码来帮助我更好地理解如何使用Goutte的网络刮刀吗?我已经读过README.md了。我正在寻找比它提供的更多的信息,例如Goutte中有哪些选项可用,以及如何编写这些选项,或者当您查看表单时,是否搜索表单的name=或id=?
网页布局尝试刮除
步骤1
网页有一个表格,有一个单选按钮,可以选择填写哪种表格。姓名或执照)。默认为“姓名”和“姓”文本框以及“状态”下拉菜单选择列表。如果选择“无线电”,则会出现jQuery或JavaScript,使“名”文本框和“姓”文本框消失,并出现一个许可证文本框。
步骤2
一旦您成功地提交了表单,它就会将您带到具有多个链接的页面。我们可以去其中的一个去获取我们需要的信息。
步骤3
一旦我们成功地点击了链接,我们希望第三个页面拥有我们正在寻找的数据,并且我们希望将数据存储到一个php变量中。
提交不正确的信息
如果提交了错误的信息,那么jQuery/Javascript将返回一条消息“找不到任何记录”。在提交的同一页上。
Note
首选的方法是选择“许可证”单选按钮,填写许可证号,选择状态,然后提交表单。我已经阅读了大量关于Goutte的帖子、博客和其他文章,我找不到Goutte的选项,你是如何找到这些信息的,或者如果它确实存在的话,如何使用这些信息。
发布于 2013-10-08 20:35:06
您想要查看的文档是Symfony2 DomCrawler。
Goutte是在Guzzle之上构建的一个客户端,每次请求/提交内容时都返回Crawler:
use Goutte\Client;
$client = new Client();
$crawler = $client->request('GET', 'http://www.symfony-project.org/');有了这个爬虫,你就可以把所有的P标签都拿到身体里了:
$nodeValues = $crawler->filter('body > p')->each(function (Crawler $node, $i) {
return $node->text();
});
print_r($nodeValues);填写并提交表格:
$form = $crawler->selectButton('sign in')->form();
$crawler = $client->submit($form, array(
'username' => 'username',
'password' => 'xxxxxx'
));selectButton()方法在Crawler上可用,它返回另一个与给定文本匹配按钮(inputtype=submit、inputtype=image或按钮)的Crawler。[1]
单击链接或设置选项,选中复选框等,请参阅Form and Link support。
要从爬虫中获取数据,请使用html或text方法
echo $crawler->html();
echo $crawler->text();发布于 2013-03-29 01:08:04
经过多次试验和错误后,我发现有一个更容易,更好的文件记录,更好的辅助(如果需要)和更有效的刮刀比古特。如果您对goutte有问题,请尝试以下方法:
如果您处于与我相同的情况,您想要抓取的页面需要来自他们自己网站的引用者,那么您可以使用CURL和简单HTML DOM的组合,因为看起来简单的HTML DOM没有发送引用的能力。如果不需要引用程序,那么可以使用简单的HTML来抓取页面。
$url="http://www.example.com/sub-page-needs-referer/";
$referer="http://www.example.com/";
$html=new simple_html_dom(); // Create a new object for SIMPLE HTML DOM
/** cURL Initialization **/
$ch = curl_init($url);
/** Set the cURL options **/
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_REFERER,$referer);
$output = curl_exec($ch);
if($output === FALSE) {
echo "cURL Error: ".curl_error($ch); // do something here if we couldn't scrape the page
}
else {
$info = curl_getinfo($ch);
echo "Took ".$info['total_time']." seconds for url: ".$info['url'];
$html->load($output); // Transfer CURL to SIMPLE HTML DOM
}
/** Free up cURL **/
curl_close($ch);
// Do something with SIMPLE HTML DOM. It is well documented and very easy to use. They have a lot of examples.https://stackoverflow.com/questions/15628926
复制相似问题