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 获取远程网页内容的函数
Sep 08 PHP
php设计模式 Facade(外观模式)
Jun 26 PHP
php导出word格式数据的代码实例
Nov 25 PHP
PHP+ajaxfileupload+jcrop插件完美实现头像上传剪裁
Jun 09 PHP
php对关联数组循环遍历的实现方法
Mar 13 PHP
PHP中数据类型转换的三种方式
Apr 02 PHP
php截取指定2个字符之间字符串的方法
Apr 15 PHP
Laravel的throttle中间件失效问题解决方法
Oct 09 PHP
PHP有序表查找之二分查找(折半查找)算法示例
Feb 09 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
Feb 07 PHP
php计数排序算法的实现代码(附四个实例代码)
Mar 31 PHP
php中yar框架实例用法讲解
Dec 27 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中使用Oracle数据库(1)
2006/10/09 PHP
PHP实现图片自动清理的方法
2015/07/08 PHP
jQuery延迟加载图片插件Lazy Load使用指南
2015/03/25 Javascript
js实现select下拉框菜单
2015/12/08 Javascript
js点击返回跳转到指定页面实现过程
2020/08/20 Javascript
倾力总结40条常见的移动端Web页面问题解决方案
2016/05/24 Javascript
用js实现博客打赏功能
2016/10/24 Javascript
js oncontextmenu事件使用详解
2017/03/25 Javascript
关于Vue实现组件信息的缓存问题
2017/08/23 Javascript
关于vue.js中实现方法内某些代码延时执行
2019/11/14 Javascript
js实现金山打字通小游戏
2020/07/24 Javascript
JavaScript实现网页tab栏效果制作
2020/11/20 Javascript
javascript实现滚轮轮播图片
2020/12/13 Javascript
vue 实现基础组件的自动化全局注册
2020/12/25 Vue.js
[02:14]2016国际邀请赛中国区预选赛Ehome晋级之路
2016/07/01 DOTA
Python2.7编程中SQLite3基本操作方法示例
2017/08/09 Python
Python使用Scrapy保存控制台信息到文本解析
2017/12/27 Python
Python编程把二叉树打印成多行代码
2018/01/04 Python
Python学习之Django的管理界面代码示例
2018/02/10 Python
使用python实现回文数的四种方法小结
2019/11/24 Python
python全局变量引用与修改过程解析
2020/01/07 Python
Keras 使用 Lambda层详解
2020/06/10 Python
keras K.function获取某层的输出操作
2020/06/29 Python
python 批量下载bilibili视频的gui程序
2020/11/20 Python
python分布式爬虫中消息队列知识点详解
2020/11/26 Python
Bibloo匈牙利:女装、男装、童装及鞋子和配饰
2019/04/14 全球购物
如何通过jdbc调用存储过程
2012/04/19 面试题
生产管理的三大手法
2013/11/11 职场文书
厉行勤俭节约倡议书
2014/05/16 职场文书
合作协议书格式
2014/08/19 职场文书
中秋节活动总结
2014/08/29 职场文书
领导欢迎词致辞
2015/01/23 职场文书
会议主持词结束语
2015/07/03 职场文书
2015秋季开学演讲稿范文
2015/07/16 职场文书
会议新闻稿
2015/07/17 职场文书
总经理致辞
2015/07/29 职场文书