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 相关文章推荐
我常用的几个类
Oct 09 PHP
基于mysql的论坛(3)
Oct 09 PHP
php数组总结篇(一)
Sep 30 PHP
解决163/sohu/sina不能够收到PHP MAIL函数发出邮件的问题
Mar 13 PHP
PHP人民币金额数字转中文大写的函数代码
Feb 27 PHP
php+MySQL判断update语句是否执行成功的方法
Aug 28 PHP
PHP判断上传文件类型的解决办法
Oct 20 PHP
Smarty模板引擎缓存机制详解
May 23 PHP
php使用ffmpeg向视频中添加文字字幕的实现方法
May 23 PHP
PHP设计模式之工厂模式与单例模式
Sep 28 PHP
php foreach如何跳出两层循环(详解)
Nov 05 PHP
PHP中SESSION过期设置
Mar 09 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
php5编程中的异常处理详细方法介绍
2008/07/29 PHP
PHP set_error_handler()函数使用详解(示例)
2013/11/12 PHP
php写入、删除与复制文件的方法
2015/06/20 PHP
PHP通过微信跳转的Code参数获取用户的openid(关键代码)
2016/07/06 PHP
jquery 操作表格实现代码(多种操作打包)
2011/03/20 Javascript
Jquery中LigerUi的弹出编辑框(实现方法)
2013/07/09 Javascript
使用javascript实现有效时间的控制,并显示将要过期的时间
2014/01/02 Javascript
实现网页页面跳转的几种方法(meta标签、js实现、php实现)
2014/05/20 Javascript
jquery判断浏览器后退时候弹出消息的方法
2014/08/11 Javascript
JavaScript中判断整字类型最简洁的实现方法
2014/11/08 Javascript
javascript上下方向键控制表格行选中并高亮显示的方法
2015/02/13 Javascript
js设置document.domain实现跨域的注意点分析
2015/05/21 Javascript
使用微信内置浏览器点击下拉框出现页面乱跳转现象(iphone),该怎么办
2016/01/04 Javascript
canvas实现十二星座星空图
2017/02/14 Javascript
简单实现JavaScript弹幕效果
2020/08/27 Javascript
详解微信小程序Page中data数据操作和函数调用
2017/09/27 Javascript
微信小程序之事件交互操作实例分析
2018/12/03 Javascript
微信小程序开发中var that =this的用法详解
2020/01/18 Javascript
手把手教你实现 Promise的使用方法
2020/09/02 Javascript
Python中变量交换的例子
2014/08/25 Python
Python写的服务监控程序实例
2015/01/31 Python
python读取json文件并将数据插入到mongodb的方法
2015/03/23 Python
用python记录运行pid,并在需要时kill掉它们的实例
2017/01/16 Python
Python 基础教程之包和类的用法
2017/02/23 Python
python语言基本语句用法总结
2019/06/11 Python
python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案
2020/02/18 Python
python 30行代码实现蚂蚁森林自动偷能量
2021/02/08 Python
CSS3 3D位移translate效果实例介绍
2016/05/03 HTML / CSS
英国著名国际平价时尚男装品牌:Topman
2016/08/27 全球购物
戴尔美国官方折扣店:Dell Outlet
2018/02/13 全球购物
英国的潮牌鞋履服饰商店:size?
2019/03/26 全球购物
银行反四风对照检查材料
2014/09/29 职场文书
期末复习计划
2015/01/19 职场文书
武夷山导游词
2015/02/03 职场文书
傲慢与偏见读书笔记
2015/06/29 职场文书
golang语言指针操作
2022/04/14 Golang