zoukankan      html  css  js  c++  java
  • php 爬虫采集

    概述

    现在爬虫技术算是一个普遍的技术了,各个语言的爬虫百家争鸣,但是根据笔者自己的感觉还是python是主流。爬虫涉及到太多的东西,笔者并不是专业的爬虫工程师,只不过个人兴趣分享一下。由于笔者是php工作,所以就使用php来进行简单爬虫。不过我的方法应该是很通用的,我相信java,C#等肯定有类似的函数,然后做法其实都一样了。

    技术准备
    看懂这段代码你需要对php的正则表达式函数以及正则表达式有一定的理解。

    代码   注意实际代码就这么多

    <?php

    //这个是你网页正则匹配出来的字符串

    $str = '<div class="title">
        <h3><span>[小组] </span>&nbsp;<a href="链接内容1" target="_blank">标签内容1</a></h3>
        <div class="info">
        237059 成员
        </div>
        </div>
        <div class="title">
        <h3><span>[小组] </span>&nbsp;<a href="链接内容2" target="_blank">标签内容2</a></h3>
        <div class="info">
        237059 成员
        </div>
        </div>';

    //这个是正则的输出结果

    preg_match_all('/<div class="title">[sS]*?<h3>[sS]*?<a href="(.*?)"[sS]*?>(.*?)</a>/',$str,$match);

    print_r($match);//根据打印的结果很明白了吧

    //这个方法就是抓取网页内容的方法了可以吧需要抓取的页面传进去,然后正则匹配内容哦

    function getUrlContent($url){//通过url获取html内容

      $ch = curl_init();
      curl_setopt($ch,CURLOPT_URL,$url);
      curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1 )");
      curl_setopt($ch,CURLOPT_HEADER,1);
      curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
      $output = curl_exec($ch);
      curl_close($ch);
      return $output;
    }
    ?>

    到这里就可以匹配你想要的数据了,如果还是不懂,就继续往下瞅瞅
    流程图


                                        


    简单的爬虫,特殊字符处理就不进行了,保证插入数据库不出错就行了

    思路
    首先getUrlContent($url)函数,只需要穿一个url地址就行了,当然了因为各个网站都有反扒机制,不过笔者的这个函数并不是万能的,但是在豆瓣测试过,其他网站大家自行测试了。
    任何网站都可以理解为一个很长的字符串,如果对html有研究无非就是:
    <html>

      <head>XXX</head>
      <body>XXX</body>
    </html>
    我们需要的只是将body标签里的东西拿出来,笔者模拟了一段body里的代码

    <html>
       <head>XXX</head>
       <body>
       <div class="title">
       <h3><span>[小组] </span>&nbsp;<a href="链接内容1" target="_blank">标签内容1</a></h3>
       <div class="info">
       237059 成员
       </div>
       </div>
       <div class="title">
       <h3><span>[小组] </span>&nbsp;<a href="链接内容2" target="_blank">标签内容2</a></h3>
       <div class="info">
       237059 成员
       </div>
       </div>
       </body>
    </html>
    对于这段代码,可以理解为一个很长的字符串

    $str = '<html>
         <head>XXX</head>
      <body>
      <div class="title">
      <h3><span>[小组] </span>&nbsp;<a href="链接内容1" target="_blank">标签内容1</a></h3>
      <div class="info">
      237059 成员
      </div>
      </div>
      <div class="title">
      <h3><span>[小组] </span>&nbsp;<a href="链接内容2" target="_blank">标签内容2</a></h3>
      <div class="info">
      237059 成员
      </div>
      </div>
      </body>
    </html>';

    对这段字符串,只需要进行正则匹配拿出你想要的,假如需要a标签里的href与内容

    preg_match_all('/<div class="title">[sS]*?<h3>[sS]*?<a href="(.*?)"[sS]*?>(.*?)</a>/',
    $str,$match);


    然后如果你不认识这段正则表达式还有preg_match_all函数,这里笔者就简单说下了,[sS]*?代表懒惰匹配任意字符,因为标签之间会用空格符换行符,这里又出现新问题什么叫懒惰匹配,简单来说就是匹配最少的内容。(.*?)代表非空字符,加括号的原因简单来说就是括号里的内容是你想要的,前面的[sS]*?匹配到的是一堆特殊符号,并没有什么作用,你不用把特殊符号记录下来,所以不加括号。

    最后打印结果,也就是$match数组。

    Array
    (
    [0] => Array
    (
      [0] => <div class="title">
        <h3><span>[小组] </span>&nbsp;<a href="链接内容1" target="_blank">标签内容1</a>
      [1] => <div class="title">
        <h3><span>[小组] </span>&nbsp;<a href="链接内容2" target="_blank">标签内容2</a>
    )

    [1] => Array
    (
      [0] => 链接内容1
      [1] => 链接内容2
    )

    [2] => Array
    (
      [0] => 标签内容1
      [1] => 标签内容2
    )

    )
    根据这个数组,需要什么自己遍历数组,然后拼装sql语句,插入到自己的数据库中即可。但是插入过程中可能会有一些单引号双引号捣乱,所以你用str_replace()把他们替换掉,或者加转义符号。

    总结
    只是针对php进行的简单爬虫,不过爬虫的思路我相信很多种语言都用得到。不过很多网站的内容是通过js返回的,或者需要登陆才能获取到数据,这些比较高级的部分,有兴趣的推荐自学python爬虫。

    本文转载自https://blog.csdn.net/qq_35370923/article/details/82901220

  • 相关阅读:
    Python之路Day14
    Python 之路Day13
    PYthon之路Day12
    三层与“养猪”
    参数化查询---解决sql漏洞注入
    关于在asp.net中的调试
    构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(21)-权限管理系统-跑通整个系统
    构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(20)-权限管理系统-根据权限获取菜单
    构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(19)-权限管理系统-用户登录
    构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(18)-权限管理系统-表数据
  • 原文地址:https://www.cnblogs.com/bkhdd/p/12214798.html
Copyright © 2011-2022 走看看