昨天没什么事,先看一下电影,就用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. Spark2.0集成Hive操作的相关配置与注意事项

    前言 已完成安装Apache Hive,具体安装步骤请参照,Linux基于Hadoop2.8.0集群安装配置Hive2.1.1及基础操作 补充说明 Hive中metastore(元数据存储)的三种方式 ...

  2. Dubbo源码学习总结系列三 dubbo-cluster集群模块

    Dubbo集群模块的目的是将集群Invokers构造一个透明的Invoker对象,其中包含了容错机制.负载均衡.目录服务(服务地址集合).路由机制等,为RPC层提供高可用.高并发.自动发现.可治理的S ...

  3. Apache Mesos1.0.1 编译安装部署教程(ubuntu)

    参考资料 官方文档:http://mesos.apache.org/documentation 中文翻译:http://mesos.mydoc.io/ GitHub:https://github.co ...

  4. more - 在显示器上阅读文件的过滤器

    总览 (SYNOPSIS) more [-dlfpcsu ] [-num ] [+/ pattern] [+ linenum] [file ... ] 描述 (DESCRIPTION) More 是 ...

  5. Sql Server 压缩数据库占用空间

    1.删除数据库库中不必要的数据2. 在数据库上右击,任务,收缩,文件,在收缩操作上选择在未使用的空间前重新组织页,将文件收缩到的最后一行为最小为XXM,在前面的输入框中填入该值,然后点击确定3.分离该 ...

  6. js undefined三目运算

    js ajax传值中 "id":$('#id').val(), 如果#id不存在,使用$('#id').val()||‘’,可避免向后台传入undefined

  7. Windows 下搭建 SVN服务器

    目录 一 .安装Visual SVN 二.配置SVN 三.安装TortoiseSVN 四.上传项目到远程仓库 五.从远程仓库下载项目 六.检出项目 七.版本回退   参考链接 https://blog ...

  8. Test 7.12 T2

    题目描述 ​ 有一张 n 个点 m 条边的无向图,其中有 s 个点上有加油站.有 Q 次询问(a,b,c), 问能否开一辆油箱容积为 c 的车从 a 走到 b. 输入格式 ​ 第一行三个整数 n,s, ...

  9. 【leetcode】1038. Binary Search Tree to Greater Sum Tree

    题目如下: Given the root of a binary search tree with distinct values, modify it so that every node has ...

  10. 第五周作业—N42-虚怀若谷

    一.查找/etc目录下大于1M且类型为普通文件的所有文件 [root@centos7 ~]# find /etc -type f -size +1M -exec ls -lh {} \; -r--r- ...