前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP爬虫

PHP爬虫

作者头像
libo1106
发布2018-08-08 15:54:25
8890
发布2018-08-08 15:54:25
举报
文章被收录于专栏:Web 开发

我居然能用爬虫抓数据了,继正则之后又迈过一道坎。

使用PHP Simple HTML DOM Parser这个库,然后自己对DOM选择器做一下二次封装,基本上可以应付一部分WordPress站点。

入门

引入PHP Simple HTML DOM Parser这个库,然后使用file_get_html()抓取目标网址后,就能像操作jQuery一样来抓取我们需要的东西了。

由于内网网络不通缘故,我使用爬虫的时候,给PHP配置了代理。正常网络环境, file_get_html($url) 即可,不需要后面两个参数。

代码语言:javascript
复制
<?php
require('./simple_html_dom.php');
$proxy = stream_context_create(array(
   'http' => array(
        'timeout' => 5,
        'proxy' => 'tcp://proxy.domain.com:8080',
        'request_fulluri' => True,
    )
));
 
$targetHTML = file_get_html($targetURL, false, $proxy);
echo($targetHTML->find('title')->plaintext);
?>

整站爬取

根据WordPress的分页规则,判断是否有下一页。

注意整站抓取的时候,需要修改PHP最大执行时间,使其可以长时间执行。

代码语言:javascript
复制
<?php
ini_set('max_execution_time',0);
?>

缓存抓取结果

整站抓取的时候,由于时间很长,未避免中途脚本出错,导致的重新执行整个爬取流程,可以对每个URL的抓取结果,进行Cache。

为了我中途检查和后续处理方便,我直接把抓取结果保存成CSV格式,以爬虫的URL为单位。

代码语言:javascript
复制
<?php
 
/**
 * 爬回来的数据,按URL缓存成CSV文件
 * @param $filename
  * @param $array
 */
public function cache($filename, $array){
    $filename = explode('//',$filename)[1];
    $filename = str_replace('.','_',$filename);
    $filename = str_replace('/','_',$filename);
    $filename = './data/'.$filename.'.csv';
 
    $fp = fopen($filename, 'w');
 
    foreach ($array as $fields) { 
        fputcsv($fp, $fields);
    }
 
    fclose($fp);
}
?>

结语

抓一个页面容易,但是整站抓取,很容易被反爬虫策略给挡在外面。一个好的爬虫,功夫都在策略的应对上面。

这次是以PHP-CLI的形式写的,中途出错只能重新执行(浏览器输入URL或者重新执行PHP-CLI),不稳定。

下次看看怎么改成以进程的形式执行,这样就不怕长时间执行出问题了。

WordPress爬虫配置及数据查看
WordPress爬虫配置及数据查看
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2014-05-102,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 入门
  • 整站爬取
  • 缓存抓取结果
  • 结语
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档