Goutte基本用法
最近工作上用到PHP爬虫框架Goutte(号称是PHP上最好用的爬虫框架)。这里记下自己用到过的使用技巧,免得下次使用的时候再摸索。
table相关
html: <table id="ip_list">
<tbody><tr>
<th colspan="8"> <h2>国内高匿代理IP</h2>
<a class="more" href="/nn">更多</a></th>
</tr>
<tr class="subtitle">
<th class="country">国家</th>
<th>代理IP地址</th>
<th>端口</th>
<th width="20%">服务器地址</th>
<th class="country">是否匿名</th>
<th>类型</th>
<th width="11%">存活时间</th>
<th width="12%">验证时间</th>
</tr>
<tr class="odd">
<td class="country"><img src="http://xxx.abc.com/images/flag/img.png" alt="cn"></td>
<td>175.155.24.112</td>
<td>808</td>
<td>四川德阳</td>
<td class="country">高匿</td>
<td>HTTP</td>
<td>3小时</td>
<td>1分钟前</td>
</tr>
</tbody></table>
php:
1.解析出td的内容
$crawler->filter('table#ip_list > tr')->each(function (Crawler $node, $i) {
$ip = $node->filter('td')->each(function(Crawler $node_ip, $node_ip_num){
$text = trim($node_ip->text());
if (empty($text) && $node_ip_num > 0 && !empty(trim($node_ip->html()))) {
$text = $node_ip->filter('div')->attr('title');
}
return $text;
});
return $ip;
});
}
2.按位置匹配td标签
$td = $crawler->filter(‘td’)->eq(1)->text();
匹配两个class
html : <div class=”class1 class2″>
php : $crawler->filter(‘div.class1.class1’);
匹配id
html : <div id=”hello”>
php : $crawler->filter(‘div#hello’);
图片
html : <img src=”http://www.lhzcl.com/image.png”>
php : $crawler->filter(‘img’)->attr(‘src’);
内嵌html
这个我常用来检测匹配规则是否正确
html : <div class=”catchMeIfYouCan”><span id=”hello”>Hello</span>world</div>
php : $crawler->filter(‘catchMeIfYouCan’)->html();
部分原创,部分参考了这篇博客