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
PHP5.2下chunk_split()函数整数溢出漏洞 分析
Jun 06 PHP
改变Apache端口等配置修改方法
Jun 05 PHP
PHP中基本符号及使用方法
Mar 23 PHP
php二维数组排序与默认自然排序的方法介绍
Apr 27 PHP
php 批量生成html,txt文件的实现代码
Jun 26 PHP
百度工程师讲PHP函数的实现原理及性能分析(一)
May 13 PHP
Zend Framework开发入门经典教程
Mar 23 PHP
Laravel框架使用Seeder实现自动填充数据功能
Jun 13 PHP
windows 2008r2+php5.6.28环境搭建详细过程
Jun 18 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
Nov 26 PHP
Yii使用DbTarget实现日志功能的示例代码
Jul 21 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
php 特殊字符处理函数
2008/09/05 PHP
具有时效性的php加密解密函数代码
2013/06/19 PHP
CodeIgniter实现从网站抓取图片并自动下载到文件夹里的方法
2015/06/17 PHP
php插入含有特殊符号数据的处理方法
2016/11/24 PHP
PHP与Web页面的交互示例详解一
2020/08/04 PHP
js程序中美元符号$是什么
2008/06/05 Javascript
jquery选择符快速提取web表单数据示例
2014/03/27 Javascript
纯js实现div内图片自适应大小(已测试,兼容火狐)
2014/06/16 Javascript
jQuery读取XML文件内容的方法
2015/03/09 Javascript
详解JavaScript编程中的数组结构
2015/10/24 Javascript
深入理解JS中的Function.prototype.bind()方法
2016/10/11 Javascript
javascript另类方法实现htmlencode()与htmldecode()函数实例分析
2016/11/17 Javascript
JavaScript Uploadify文件上传实例
2017/02/28 Javascript
JS实现移动端判断上拉和下滑功能
2017/08/07 Javascript
js限制input只能输入有效的数字(第一个不能是小数点)
2018/09/28 Javascript
详解Ant Design of React的安装和使用方法
2018/12/27 Javascript
JS秒杀倒计时功能完整实例【使用jQuery3.1.1】
2019/09/03 jQuery
[32:07]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第一场 12.16
2020/12/17 DOTA
Python中为什么要用self探讨
2015/04/14 Python
Python监控主机是否存活并以邮件报警
2015/09/22 Python
21行Python代码实现拼写检查器
2016/01/25 Python
python3实现UDP协议的服务器和客户端
2017/06/14 Python
Python with语句上下文管理器两种实现方法分析
2018/02/09 Python
python实现括号匹配的思路详解
2018/08/23 Python
提升Python程序性能的7个习惯
2019/04/14 Python
使用PyWeChatSpy自动回复微信拍一拍功能的实现代码
2020/07/02 Python
python 利用panda 实现列联表(交叉表)
2021/02/06 Python
自荐信模版
2013/10/24 职场文书
电子商务系毕业生自荐信
2014/05/29 职场文书
2014财务人员自我评价范文
2014/09/21 职场文书
向雷锋同志学习倡议书
2015/04/27 职场文书
2015秋季开学典礼演讲稿
2015/07/16 职场文书
详解CocosCreator项目结构机制
2021/04/14 Javascript
MySQL中一条update语句是如何执行的
2022/03/16 MySQL
Redis超详细讲解高可用主从复制基础与哨兵模式方案
2022/04/07 Redis
Android开发之底部导航栏的快速实现
2022/04/28 Java/Android