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
用PHP的超级变量$_GET获取HTML表单(Form) 数据
May 07 PHP
解析php安全性问题中的:Null 字符问题
Jun 21 PHP
提升PHP性能的21种方法介绍
Jun 25 PHP
php中magic_quotes_gpc对unserialize的影响分析
Dec 16 PHP
PHP实现CSV文件的导入和导出类
Mar 24 PHP
Laravel 5框架学习之Eloquent (laravel 的ORM)
Apr 08 PHP
实现WordPress主题侧边栏切换功能的PHP脚本详解
Dec 14 PHP
WordPress中访客登陆实现邮件提醒的PHP脚本实例分享
Dec 14 PHP
PHP常见的几种攻击方式实例小结
Apr 29 PHP
php实现微信公众号创建自定义菜单功能的实例代码
Jun 11 PHP
php使用redis的有序集合zset实现延迟队列应用示例
Feb 20 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.ini中文版(2)
2006/10/09 PHP
使用sockets:从新闻组中获取文章(二)
2006/10/09 PHP
PHP反射使用实例和PHP反射API的中文说明
2014/07/02 PHP
Zend Framework动作控制器用法示例
2016/12/09 PHP
php实现购物车产品删除功能(2)
2020/07/23 PHP
JS连连看源码完美注释版(推荐)
2013/12/09 Javascript
jquery $(&quot;#variable&quot;) 循环改变variable的值示例
2014/02/23 Javascript
Node.js中使用mongoskin操作mongoDB实例
2014/09/28 Javascript
javascript实现鼠标拖动改变层大小的方法
2015/04/30 Javascript
JavaScript中数组添加值和访问值常见问题
2016/02/06 Javascript
浅析jquery如何判断滚动条滚到页面底部并执行事件
2016/04/29 Javascript
JavaScript  event对象整理及详细介绍
2016/10/10 Javascript
微信公众号-获取用户信息(网页授权获取)实现步骤
2016/10/21 Javascript
解决vue v-for 遍历循环时key值报错的问题
2018/09/06 Javascript
vue 刷新之后 嵌套路由不变 重新渲染页面的方法
2018/09/13 Javascript
layui弹出框Tab选项卡的示例代码
2019/09/04 Javascript
vue多个元素的样式选择器问题
2019/11/29 Javascript
JavaScript canvas仿代码流瀑布
2020/02/10 Javascript
vue利用全局导航守卫作登录后跳转到未登录前指定页面的实例代码
2020/05/19 Javascript
小程序中手机号识别的示例
2020/12/14 Javascript
[04:16]完美世界DOTA2联赛PWL S2 集锦第一期
2020/11/23 DOTA
在漏洞利用Python代码真的很爽
2007/08/26 Python
pandas修改DataFrame列名的方法
2018/04/08 Python
python实现邮件发送功能
2019/08/10 Python
python线程安全及多进程多线程实现方法详解
2019/09/27 Python
Python判断远程服务器上Excel文件是否被人打开的方法
2020/07/13 Python
Python GUI库Tkiner使用方法代码示例
2020/11/27 Python
css3翻牌翻数字的示例代码
2020/02/07 HTML / CSS
HTML5中新标签和常用标签详解
2014/03/07 HTML / CSS
浅析HTML5中header标签的用法
2016/06/24 HTML / CSS
全球领先的中国制造商品在线批发平台:DHgate
2020/01/28 全球购物
Spotahome意大利:公寓和房间出租
2020/02/21 全球购物
承诺书应该怎么写?
2019/09/10 职场文书
描写九月优美句子(39条)
2019/09/11 职场文书
Redis6.0搭建集群Redis-cluster的方法
2021/05/08 Redis
【海涛七七解说】DCG第二周:DK VS 天禄
2022/04/01 DOTA