zoukankan      html  css  js  c++  java
  • PHP 正则表达式抓取网页内容。

    我想用php抓取爱奇艺生活类型视频网页里面的元素,应该如何去做呢?

    首先我要非常熟悉正则表达式,关于正则表达式的学习,我会写一篇博客一直学习的。


    直接举例子:

    这是一个爱奇艺生活视频的界面的网址

    $url="http://www.iqiyi.com/v_19rrb1wlpw.html";


    php的file_get_contents()函数,是把网页里的源码全部变成字符串读取出来。


    $showdata=file_get_contents($url);


    echo $showdata;


    这几句话就可以做到把网页源码拿过来,再显示出来。


    在得到网页源码的基础上,我们再利用正则表达式,把自己需要的内容提取出来。


    php的preg_match_all('正则表达式内容','目标字符串',‘储存的字符串’);


    上面的例子中  preg_match_all('/cid:(d+)/', $showdata, $cid); 则是查找网页源码中所有符合cid:+数字的所有字符串。储存在cid中,cid是一个二维数组。


    最简单的方法就是上面这些。但是在实际用到的时候却遇到一些问题。首先,网页源代码是网页初始化之前的代码,如果我们需要提取网页初始化之后的某些元素怎么办?


    file_get_contents()只能获得源代码。初始化好之后的网页,无疑是通过post或者get请求数据得来的,我们打开javascript 控制台




    看到network ,里面是每个网页源代码中加载的请求,而我们需要的元素就在这些请求之中,你需要把请求找出来,一般,视频网站向后台获取数据,都是由规律的,你需要自己去分析,获得视频网站的后台数据的url,我分析了一下午,找到了爱奇艺生活视频的后台数据url。


    第二个问题就是正则表达式的问题,首先正则表达式比较难,容易写错,强烈建议,下载一个正则表达式测试器,先测试一下。

    在获取网页内容中,我遇到了一个问题,如果用preg_match_all 抓取玩内容,在抓取的内容的基础上面再用preg_match_all,再抓取一次,这个时候会遇到问题。

    因为第一次抓取获得的是一个二维数组,我们应该把它变成字符串,简单的用a[0][0]是不行的,需要用到implode函数 $b=implode('',$a[0]);



  • 相关阅读:
    凸包模板
    F
    luogu P1220 关路灯
    [国家集训队]小Z的袜子
    [AHOI2009]维护序列
    luogu P3373 【模板】线段树 2
    [国家集训队]数颜色 / 维护队列
    luogu P3393 逃离僵尸岛
    [Usaco2005 Mar]Out of Hay 干草危机
    [USACO07NOV]牛栏Cow Hurdles
  • 原文地址:https://www.cnblogs.com/dacc123/p/8228526.html
Copyright © 2011-2022 走看看