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 相关文章推荐
E路文章系统PHP
Dec 11 PHP
PHP define函数的使用说明
Aug 27 PHP
PHP parse_url 一个好用的函数
Oct 03 PHP
PHP循环语句笔记(foreach,list)
Nov 29 PHP
PHP的博客ping服务代码
Feb 04 PHP
PHP中文件读、写、删的操作(PHP中对文件和目录操作)
Mar 06 PHP
让codeigniter与swfupload整合的最佳解决方案
Jun 12 PHP
php实现网页缓存的工具类分享
Jul 14 PHP
Laravel路由设定和子路由设定实例分析
Mar 30 PHP
windows server 2008/2012安装php iis7 mysql环境搭建教程
Jun 30 PHP
php生成mysql的数据字典
Jul 07 PHP
php接口实现拖拽排序功能
Apr 23 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
Linux服务器下PHPMailer发送邮件失败的问题解决
2017/03/04 PHP
PHP 获取客户端 IP 地址的方法实例代码
2018/11/11 PHP
不要在cookie中使用特殊字符的原因分析
2010/07/13 Javascript
无阻塞加载脚本分析[全]
2011/01/20 Javascript
imgAreaSelect 中文文档帮助说明
2011/10/08 Javascript
Javascript实现带关闭按钮的网页漂浮广告代码
2014/01/12 Javascript
ExtJS 刷新后如何默认选中刷新前最后一次选中的节点
2014/04/03 Javascript
js面向对象之静态方法和静态属性实例分析
2015/01/10 Javascript
javascript常用函数(2)
2015/11/05 Javascript
Vue.js中用webpack合并打包多个组件并实现按需加载
2017/02/17 Javascript
基于node.js的fs核心模块读写文件操作(实例讲解)
2017/09/10 Javascript
微信小程序的日期选择器的实例详解
2017/09/29 Javascript
vue-cli扩展多模块打包的示例代码
2018/04/09 Javascript
JS实现根据指定值删除数组中的元素操作示例
2018/08/02 Javascript
解决vue移动端适配问题
2018/12/12 Javascript
Vue 指令实现按钮级别权限管理功能
2019/04/23 Javascript
微信小程序左右滚动公告栏效果代码实例
2019/09/16 Javascript
[06:25]DOTA2英雄梦之声_第17期_大地之灵
2014/06/20 DOTA
[01:52]2020年DOTA2 TI10夏季活动预告片
2020/07/15 DOTA
Python爬虫包BeautifulSoup异常处理(二)
2018/06/17 Python
浅谈python 导入模块和解决文件句柄找不到问题
2018/12/15 Python
PyQT5 emit 和 connect的用法详解
2019/12/13 Python
python中 _、__、__xx__()区别及使用场景
2020/06/30 Python
python实现AdaBoost算法的示例
2020/10/03 Python
css3动画效果抖动解决方法
2018/09/03 HTML / CSS
使用CSS3实现圆角,阴影,透明
2014/12/23 HTML / CSS
JAVA中运算符的分类及举例
2015/09/12 面试题
会计专业职业规划:规划自我赢取未来
2014/02/12 职场文书
领导调研接待方案
2014/02/27 职场文书
cf收人广告词大全
2014/03/14 职场文书
弘扬民族精神演讲稿
2014/05/07 职场文书
干部年终考核评语
2015/01/04 职场文书
Go语言并发编程 sync.Once
2021/10/16 Golang
分享提高 Python 代码的可读性的技巧
2022/03/03 Python
Python基本知识点总结
2022/04/07 Python
Python使用Beautiful Soup(BS4)库解析HTML和XML
2022/06/05 Python