昨天没什么事,先看一下电影,就用php写了一个爬虫在视频网站上进行视频下载地址的抓取,这里总结一下抓取过程中遇到的问题

1:通过访问浏览器来执行php脚本这种访问方式其实并不适合用来爬网页,因为要受到php的连接时间,内存等的限制,当然了这里是可以修改php.ini的配置文件,但是还是不推荐使用,

php做长周期的任务的时候推荐使用php-cli(命令行)的方式进行,这样效率相比web访问的效率要高得多的多

2:在爬取页面的时候,一开始使用的是file_get_contents()的方式,结果执行一段时间以后php就会报错(failed to open stream: No error ),后来查了一下,有人说curl()函数不会出现上述问题,就采用了curl的方式去采集数据,没有问题

3:在进行采集之前,最好修改一下php.ini中的参数 user_agent(具体请百度)

下面是抓取的代码:

<?php

header( "Content-type:text/html;Charset=utf-8" );

class Get_info{

     //没有爬过的url
private $url_arr_no = [ ]; //已经爬过的url
private $url_arr_over = [ ]; //获取url的正则表达式
private $url_reg ="/<a href=['\"](.*?)['\"].*?>(.*?)<\/a>/i"; //获取ftp地址的正则表达式
private $ftp_reg = "/<td[\d\D]*?><a href=\"([\d\D]*?)\">[\d\D]*?<\/a><\/td>/i"; //url前缀
private $prefix_url = null; //查找到的数据
public $ftp_result = [ ]; public function __construct( $url = "" ){
if( empty( $url ) ){
echo "url不能为空";
return false;
}
$this ->url_arr_no[ ] = $url;
$this ->prefix_url = $url;
} //开始执行
public function start( ){
echo "查找开始<br/>";
$ch = curl_init( );
curl_setopt ( $ch , CURLOPT_RETURNTRANSFER , 1 );
curl_setopt ( $ch , CURLOPT_CONNECTTIMEOUT ,10 );
while( ! empty( $this ->url_arr_no ) ){
//foreach ( $this->url_arr_no as $key => $value ) {
$value = array_shift( $this->url_arr_no );
if( substr( $value, 0,8 ) == "/webPlay"){
continue;
}
if( ! in_array( $value , $this->url_arr_over ) ){ //如果需要查找的url没有爬过,就开始爬
curl_setopt ($ch, CURLOPT_URL, $value );
$content = curl_exec($ch);
//利用正则进行解析页面内容
preg_match_all( $this->url_reg, $content , $url_match );
preg_match_all( $this->ftp_reg, $content , $ftp_match );
//如果新查到的url已经在待查询或者已经查询的数组中存在,就不添加
if( ! empty( $url_match[1] ) ){
foreach( $url_match[1] as $url ){
if( ! in_array( $url, $this->url_arr_no ) && ! in_array( $url,$this->url_arr_over )){
$this ->url_arr_no[ ] = $this ->prefix_url.$url;
}
}
}
//如果ftp地址已经存在,就不进行存储
if( ! empty( $ftp_match[1] ) ){
foreach( $ftp_match[1] as $ftp ){
if( ! in_array( $ftp, $this->ftp_result ) ){
$this ->ftp_result[ ] = $ftp;
file_put_contents("result.txt" , $ftp."\r\n" , FILE_APPEND);
}
}
}
$this ->url_arr_over[ ] = $value;
$key_arr = array_keys( $this->url_arr_no,$value );
if( ! empty( $key_arr ) ){
foreach( $key_arr as $k => $v ){
unset( $this->url_arr_no[ $v ] );
}
}
}
//}
}
echo "查找完毕";
}
} $url = "";
$class = new Get_info( $url );
$class -> start( ); ?>

  

用php实现一个简单的爬虫,抓取电影网站的视频下载地址的更多相关文章

  1. 一个简单java爬虫爬取网页中邮箱并保存

    此代码为一十分简单网络爬虫,仅供娱乐之用. java代码如下: package tool; import java.io.BufferedReader; import java.io.File; im ...

  2. 使用selenium实现简单网络爬虫抓取MM图片

    撸主听说有个网站叫他趣,里面有个社区,其中有一项叫他趣girl,撸主点进去看了下,还真不错啊,图文并茂,宅男们自己去看看就知道啦~ 接下来当然就是爬取这些妹子的图片啦,不仅仅是图片,撸主发现里面的对话 ...

  3. Python爬虫 -- 抓取电影天堂8分以上电影

    看了几天的python语法,还是应该写个东西练练手.刚好假期里面看电影,找不到很好的影片,于是有个想法,何不搞个爬虫把电影天堂里面8分以上的电影爬出来.做完花了两三个小时,撸了这么一个程序.反正蛮简单 ...

  4. 如何抓取直播源及视频URL地址-疯狂URL(教程)

    直播源介绍 首先,我们来快速了解一下什么是直播源,所谓的直播源,其实就说推流地址,推流地址可能你也不知道是什么,那么我再简单说一下,推流地址就是,当某个直播开播的时候,需要将自己的直播状态实时的展示给 ...

  5. [Python学习] 简单网络爬虫抓取博客文章及思想介绍

            前面一直强调Python运用到网络爬虫方面很有效,这篇文章也是结合学习的Python视频知识及我研究生数据挖掘方向的知识.从而简介下Python是怎样爬去网络数据的,文章知识很easy ...

  6. 使用Python编写简单网络爬虫抓取视频下载资源

    我第一次接触爬虫这东西是在今年的5月份,当时写了一个博客搜索引擎.所用到的爬虫也挺智能的,起码比电影来了这个站用到的爬虫水平高多了! 回到用Python写爬虫的话题. Python一直是我主要使用的脚 ...

  7. python3一个简单的网页抓取

    都是学PYTHON.怎么学都是学,按照基础学也好,按照例子增加印象也好,反正都是学 import urllib import urllib.request data={} data['word']=' ...

  8. Java豆瓣电影爬虫——抓取电影详情和电影短评数据

    一直想做个这样的爬虫:定制自己的种子,爬取想要的数据,做点力所能及的小分析.正好,这段时间宝宝出生,一边陪宝宝和宝妈,一边把自己做的这个豆瓣电影爬虫的数据采集部分跑起来.现在做一个概要的介绍和演示. ...

  9. C# 使用 Abot 实现 爬虫 抓取网页信息 源码下载

    下载地址 ** dome **

随机推荐

  1. kali优化配置(2)

    下次再安Java吧...心累小赵在线哭泣... 0x01 安装显卡驱动 安装GPU,加速密码破解: grub--kali的启动器 0x02 并发线程限制 ulimit由于限制当前shell内进程的资源 ...

  2. generator (1)

    function array () { console.log(arguments) }; array(1,2,3) 从这里我们可以看出 数组的迭代方法里面有一个 属性  [Symbol.iterat ...

  3. IndexError: list index out of range的错误原因

    第1种可能情况list[index]index超出范围 第2种可能情况list是一个空的 没有一个元素进行list[0]就会出现该错误 ————————————————版权声明:本文为CSDN博主「m ...

  4. @ControllerAdvice全局数据预处理

    在传统项目的Controller的方法中传入参数,对象中的属性相同时,会出现以下错误         Book类和Author类     这是因为两个对象中的name相同,传参时分不清西游记和六小龄童 ...

  5. Linux 系统参数优化

    修改系统所有进程可打开的文件数量 sysctl -w fs.file-max=2097152sysctl -w fs.nr_open=2097152 > vi /etc/sysctl.conff ...

  6. xiugai-去除js注释

    <div class="myLoading"> <div class="svg-wrap"> <svg width="8 ...

  7. 心形陀螺案例css3

    <!DOCTYPE html><html lang="zh-cn"><head> <meta charset="UTF-8&qu ...

  8. QT_study

    https://blog.csdn.net/a313827758/article/details/72736552 https://blog.csdn.net/xbcreal/article/deta ...

  9. 解决IDEA输入法输入中文候选框不显示问题

    本机环境为: 系统: win7        jdk版本:jdk1.8.0_65      idea版本:2017.2.3 解决方法:关掉idea,进入idea的安装目录找到jre64文件夹重命名为j ...

  10. 三层for循环求解组成三角形边的组合

    假设a.b.c是三角形的三条边,当三条边符合勾股定理时,即,a2+b2=c2 ,为直角三角形.若a.b.c均为小于等于50的整数,求能够组成直角三角形的所有组合.请显示边的各种可能组合情况,显示总的组 ...