昨天没什么事,先看一下电影,就用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. Codeforces Round #421 (Div. 2) - A

    题目链接:http://codeforces.com/contest/820/problem/A 题意:一个人在看一本书,书一共C页,这个人每天看v0页,但是他又开始加速看这本书,每天都比前一天多看a ...

  2. break语句、continue语句、goto语句的用法辨析

    1.break语句 break语句常使用在switch语句.循环体以及if语句中,它的作用是跳出循环,而且只能跳出一层循环. for (i = 0; i < 10; ++j) { for (j ...

  3. 终于读完了《Essential C++》

    先说这本书的优点吧 真的是一本非常好的书 不拘泥于非常具体的语法点 读这本书,可以体会到面向对象的魅力所在. 缺点就是这本书不太适合入门,当初也不知道是谁推荐我入门看这本书的. 想要大致能看懂这本书, ...

  4. ps:图像格式的选择

    从上面点阵与矢量两者的对比中,似乎矢量格式有优势,那为什么不都使用矢量格式呢? 这是因为矢量图像是基于线段的.因此它不适合记录色彩较为复杂的图像.如下图, 如果使用点阵方式来记录,只要按照顺序扫描并记 ...

  5. stream benchmark 交叉编译 on psoc

    之前有研究过这个,居然忘记了,看来确实是老了,没有盘过来. 如何下载,见 linux下载网页上的文件夹以及删除文件(stream) 出现了好几个问题 1. error while loading sh ...

  6. 配置 Kibana

    Products Cloud Services Customers Learn downloads EN Docs Kibana 用户手册 » 搭建 » 配置 Kibana «  在 Windows ...

  7. Django组件---Django请求生命周期和中间件

    Django组件---Django请求生命周期和中间件 Django请求生命周期 说明: client代表浏览器,浏览器的内部为我们封装了socket,Django的WSGI模块也为我们封装了sock ...

  8. SPOJ QTREE - Query on a tree 【树链剖分模板】

    题目链接 引用到的大佬博客 代码来自:http://blog.csdn.net/jinglinxiao/article/details/72940746 具体算法讲解来自:http://blog.si ...

  9. hdu 5963:朋友

    刚看到这题时感觉是树上博弈,然后我开始用一维的数据找规律.发现在一维的树上,如果把各边的值合在一起当成一个二进制数,那么,ans只与奇偶性有关,于是,我提出了一个比较大胆的假设:若连接在root上的所 ...

  10. 简单的DOS攻击之死亡之ping详解

    DOS攻击之死亡之ping详解,dos攻击,俗称拒绝服务攻击,通过发送大量的无用请求数据包给服务器,耗尽服务器资源,从而无法通过正常的访问服务器资源,导致服务器崩溃. 如果多个ip通过发起对一个服务器 ...