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 相关文章推荐
用ADODB来让PHP操作ACCESS数据库的方法
Dec 31 PHP
php allow_url_include的应用和解释
Apr 22 PHP
php 操作数组(合并,拆分,追加,查找,删除等)
Jul 20 PHP
PHP中使用crypt()实现用户身份验证的代码
Sep 05 PHP
phpnow php探针环境检测代码
Nov 04 PHP
php检查是否是ajax请求的方法
Apr 16 PHP
最新制作ThinkPHP3.2.3完全开发手册
Nov 23 PHP
PHP创建PowerPoint2007文档的方法
Dec 10 PHP
php实现压缩合并js的方法【附demo源码下载】
Sep 22 PHP
php获得文件夹下所有文件的递归算法的简单实例
Nov 01 PHP
一个非常实用的php文件上传类
Jul 04 PHP
php利用云片网实现短信验证码功能的示例代码
Nov 18 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里的JS打印函数
2006/10/09 PHP
php实现文件下载代码分享
2014/08/19 PHP
使用xampp搭建运行php虚拟主机的详细步骤
2015/10/21 PHP
php和html的区别点详细总结
2019/09/24 PHP
MacOS下PHP7.1升级到PHP7.4.15的方法
2021/02/22 PHP
用Jquery实现多级下拉框无刷新的联动
2010/12/22 Javascript
JavaScript创建一个欢迎cookie弹出窗实现代码
2013/03/15 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器(优化篇)
2013/06/28 Javascript
jquery清空表单数据示例分享
2014/02/13 Javascript
JS验证邮件地址格式方法小结
2015/12/01 Javascript
Highcharts 多个Y轴动态刷新数据的实现代码
2016/05/28 Javascript
Javascript类型系统之String字符串类型详解
2016/06/21 Javascript
jQuery表单插件ajaxForm实例详解
2017/01/17 Javascript
原生JS实现幻灯片
2017/02/22 Javascript
js图片放大镜实例讲解(必看篇)
2017/07/17 Javascript
js使用原型对象(prototype)需要注意的地方
2017/08/28 Javascript
vue实现路由切换改变title功能
2019/05/28 Javascript
JS学习笔记之贪吃蛇小游戏demo实例详解
2019/05/29 Javascript
vue插槽slot的简单理解与用法实例分析
2020/03/14 Javascript
Openlayers+EasyUI Tree动态实现图层控制
2020/09/28 Javascript
在 Django/Flask 开发服务器上使用 HTTPS
2014/07/03 Python
Python之ReportLab绘制条形码和二维码的实例
2018/01/15 Python
python使用代理ip访问网站的实例
2018/05/07 Python
python opencv实现图片旋转矩形分割
2018/07/26 Python
python 实现在一张图中绘制一个小的子图方法
2019/07/07 Python
python二分法查找算法实现方法【递归与非递归】
2019/12/06 Python
css3进阶之less实现星空动画的示例代码
2019/09/10 HTML / CSS
HTML5几个设计和修改的页面范例分享
2015/09/29 HTML / CSS
Ted Baker英国官网:男士和女士服装及配件
2017/03/13 全球购物
小学少先队活动方案
2014/02/18 职场文书
信息管理应届生求职信
2014/03/07 职场文书
金融专业银行实习证明模板
2014/11/28 职场文书
保安辞职信范文
2015/02/28 职场文书
保险公司反洗钱宣传活动总结
2015/05/08 职场文书
小学三年级作文之写景
2019/11/05 职场文书
TS 类型兼容教程示例详解
2022/09/23 Javascript