PHP+HTML+JavaScript+Css实现简单爬虫开发


Posted in PHP onMarch 28, 2016

开发一个爬虫,首先你要知道你的这个爬虫是要用来做什么的。我是要用来去不同网站找特定关键字的文章,并获取它的链接,以便我快速阅读。

按照个人习惯,我首先要写一个界面,理清下思路。

    1、去不同网站。那么我们需要一个url输入框。

    2、找特定关键字的文章。那么我们需要一个文章标题输入框。

    3、获取文章链接。那么我们需要一个搜索结果的显示容器。

<div class="jumbotron" id="mainJumbotron">
 <div class="panel panel-default">
 
  <div class="panel-heading">文章URL抓取</div>
 
  <div class="panel-body">
   <div class="form-group">
    <label for="article_title">文章标题</label>
    <input type="text" class="form-control" id="article_title" placeholder="文章标题">
   </div>
   <div class="form-group">
    <label for="website_url">网站URL</label>
    <input type="text" class="form-control" id="website_url" placeholder="网站URL">
   </div>
 
   <button type="submit" class="btn btn-default">抓取</button>
  </div>
 </div>
 <div class="panel panel-default">
 
  <div class="panel-heading">文章URL</div>
 
  <div class="panel-body">
   <h3></h3>
  </div>
 </div>
</div>

直接上代码,然后加上自己的一些样式调整,界面就完成啦:

PHP+HTML+JavaScript+Css实现简单爬虫开发

那么接下来就是功能的实现了,我用PHP来写,首先第一步就是获取网站的html代码,获取html代码的方式也有很多,我就不一一介绍了,这里用了curl来获取,传入网站url就能得到html代码啦:

private function get_html($url){
 
 $ch = curl_init();
 
 $timeout = 10;
 
 curl_setopt($ch, CURLOPT_URL, $url);
 
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 
 curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
 
 curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36');
 
 curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
 
 $html = curl_exec($ch);
 
 return $html;
 
}

虽然得到了html代码,但是很快你会遇到一个问题,那就是编码问题,这可能让你下一步的匹配无功而返,我们这里统一把得到的html内容转为utf8编码:

$coding = mb_detect_encoding($html);
 
if ($coding != "UTF-8" || !mb_check_encoding($html, "UTF-8"))
 
 $html = mb_convert_encoding($html, 'utf-8', 'GBK,UTF-8,ASCII');

得到网站的html,要获取文章的url,那么下一步就是要匹配该网页下的所有a标签,需要用到正则表达式,经过多次测试,最终得到一个比较靠谱的正则表达式,不管a标签下结构多复杂,只要是a标签的都不放过:(最关键的一步)

$pattern = '|<a[^>]*>(.*)</a>|isU';
 
preg_match_all($pattern, $html, $matches);

匹配的结果在$matches中,它大概是这样的一个多维素组:

array(2) { 
 [0]=> 
 array(*) { 
  [0]=>
  string(*) "完整的a标签"
  .
  .
  .
 }
 [1]=>
 array(*) {
  [0]=>
  string(*) "与上面下标相对应的a标签中的内容"
 }
}

只要能得到这个数据,其他就完全可以操作啦,你可以遍历这个素组,找到你想要a标签,然后获取a标签相应的属性,想怎么操作就怎么操作啦,下面推荐一个类,让你更方便操作a标签:

$dom = new DOMDocument();
 
@$dom->loadHTML($a);//$a是上面得到的一些a标签
 
$url = new DOMXPath($dom);
 
$hrefs = $url->evaluate('//a');
 
for ($i = 0; $i < $hrefs->length; $i++) {
 
 $href = $hrefs->item($i);
 
 $url = $href->getAttribute('href'); //这里获取a标签的href属性
 
}

当然,这只是一种方式,你也可以通过正则表达式匹配你想要的信息,把数据玩出新花样。

得到并匹配得出你想要的结果,下一步当然就是传回前端将他们显示出来啦,把接口写好,然后前端用js获取数据,用jquery动态添加内容显示出来:

var website_url = '你的接口地址';
$.getJSON(website_url,function(data){
 if(data){
  if(data.text == ''){
   $('#article_url').html('<div><p>暂无该文章链接</p></div>');
   return;
  }
  var string = '';
  var list = data.text;
  for (var j in list) {
    var content = list[j].url_content;
    for (var i in content) {
     if (content[i].title != '') {
      string += '<div class="item">' +
       '<em>[<a href="http://' + list[j].website.web_url + '" target="_blank">' + list[j].website.web_name + '</a>]</em>' +
       '<a href=" ' + content[i].url + '" target="_blank" class="web_url">' + content[i].title + '</a>' +
       '</div>';
     }
    }
   }
  $('#article_url').html(string);
});

上最终效果图:

PHP+HTML+JavaScript+Css实现简单爬虫开发

以上就是本文的全部内容,希望对大家的学习有所帮助。

PHP 相关文章推荐
用PHP制作静态网站的模板框架(四)
Oct 09 PHP
php下使用以下代码连接并测试
Apr 09 PHP
php递归列出所有文件和目录的代码
Sep 10 PHP
关于file_get_contents返回为空或函数不可用的解决方案
Jun 24 PHP
服务器变量 $_SERVER 的深入解析
Jul 02 PHP
php中magic_quotes_gpc对unserialize的影响分析
Dec 16 PHP
PHP根据图片色界在不同位置加水印的方法
Jul 01 PHP
PHP微信红包API接口
Dec 05 PHP
PHP发送AT指令实例代码
May 26 PHP
Yii全局函数用法示例
Jan 22 PHP
PHP封装的完整分页类示例
Aug 21 PHP
laravel 实现用户登录注销并限制功能
Oct 24 PHP
Yii框架上传图片用法总结
Mar 28 #PHP
Yii开启片段缓存的方法
Mar 28 #PHP
CI操作cookie的方法分析(基于helper类库)
Mar 28 #PHP
CI映射(加载)数据到view层的方法
Mar 28 #PHP
CI配置多数据库访问的方法
Mar 28 #PHP
浅谈PHP中其他类型转化为Bool类型
Mar 28 #PHP
CI分页类首页、尾页不显示的解决方法
Mar 28 #PHP
You might like
漫荒推荐:画风超赞的国风漫画推荐 超长假期不无聊
2020/03/08 国漫
解析PHP中DIRECTORY_SEPARATOR,PATH_SEPARATOR两个常量的作用
2013/06/21 PHP
PHP实现单例模式最安全的做法
2014/06/13 PHP
详解PHP中的Traits
2015/07/29 PHP
php实现网站文件批量压缩下载功能
2015/10/28 PHP
PHP+Apache+Mysql环境搭建教程
2016/08/01 PHP
PHP实现微信模拟登陆并给用户发送消息的方法【文字,图片,图文】
2017/06/29 PHP
PHP基于方差和标准差计算学生成绩的稳定性示例
2017/07/04 PHP
utf8的编码算法 转载
2006/12/27 Javascript
替代window.event.srcElement效果的可兼容性的函数
2009/12/18 Javascript
JavaScript实现统计文本框Textarea字数增强用户体验
2012/12/21 Javascript
点击进行复制的JS代码实例
2013/08/23 Javascript
javascript在myeclipse中报错的解决方法
2013/10/29 Javascript
window.showModalDialog()返回值的学习心得总结
2014/01/07 Javascript
浅谈javascript面向对象程序设计
2015/01/21 Javascript
jQuery选择器源码解读(五):tokenize的解析过程
2015/03/31 Javascript
整理JavaScript创建对象的八种方法
2015/11/03 Javascript
浅析nodejs实现Websocket的数据接收与发送
2015/11/19 NodeJs
详解Node.js中的事件机制
2016/09/22 Javascript
jQuery插件实现可输入和自动匹配的下拉框
2016/10/24 Javascript
微信公众平台开发教程(六)获取个性二维码的实例
2016/12/02 Javascript
jQuery Validate插件ajax方式验证输入值的实例
2017/12/21 jQuery
nodejs使用http模块发送get与post请求的方法示例
2018/01/08 NodeJs
Vue组件中slot的用法
2018/01/30 Javascript
vue iview 隐藏Table组件里的某一列操作
2020/11/13 Javascript
Python 搭建Web站点之Web服务器与Web框架
2016/11/06 Python
对Python进行数据分析_关于Package的安装问题
2017/05/22 Python
Python中的引用知识点总结
2019/05/20 Python
python3实现mysql导出excel的方法
2019/07/31 Python
使用sklearn对多分类的每个类别进行指标评价操作
2020/06/11 Python
CSS3田字格列表的样式编写方法
2018/11/22 HTML / CSS
请说出以下代码输出什么
2013/08/30 面试题
房地产开盘策划方案
2014/02/10 职场文书
公司领导班子对照检查材料
2014/09/24 职场文书
2015年质量月活动总结报告
2015/03/27 职场文书
导游词之舟山普陀山
2019/11/06 职场文书