用php实现一个简单的爬虫,抓取电影网站的视频下载地址
昨天没什么事,先看一下电影,就用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实现一个简单的爬虫,抓取电影网站的视频下载地址的更多相关文章
- 一个简单java爬虫爬取网页中邮箱并保存
此代码为一十分简单网络爬虫,仅供娱乐之用. java代码如下: package tool; import java.io.BufferedReader; import java.io.File; im ...
- 使用selenium实现简单网络爬虫抓取MM图片
撸主听说有个网站叫他趣,里面有个社区,其中有一项叫他趣girl,撸主点进去看了下,还真不错啊,图文并茂,宅男们自己去看看就知道啦~ 接下来当然就是爬取这些妹子的图片啦,不仅仅是图片,撸主发现里面的对话 ...
- Python爬虫 -- 抓取电影天堂8分以上电影
看了几天的python语法,还是应该写个东西练练手.刚好假期里面看电影,找不到很好的影片,于是有个想法,何不搞个爬虫把电影天堂里面8分以上的电影爬出来.做完花了两三个小时,撸了这么一个程序.反正蛮简单 ...
- 如何抓取直播源及视频URL地址-疯狂URL(教程)
直播源介绍 首先,我们来快速了解一下什么是直播源,所谓的直播源,其实就说推流地址,推流地址可能你也不知道是什么,那么我再简单说一下,推流地址就是,当某个直播开播的时候,需要将自己的直播状态实时的展示给 ...
- [Python学习] 简单网络爬虫抓取博客文章及思想介绍
前面一直强调Python运用到网络爬虫方面很有效,这篇文章也是结合学习的Python视频知识及我研究生数据挖掘方向的知识.从而简介下Python是怎样爬去网络数据的,文章知识很easy ...
- 使用Python编写简单网络爬虫抓取视频下载资源
我第一次接触爬虫这东西是在今年的5月份,当时写了一个博客搜索引擎.所用到的爬虫也挺智能的,起码比电影来了这个站用到的爬虫水平高多了! 回到用Python写爬虫的话题. Python一直是我主要使用的脚 ...
- python3一个简单的网页抓取
都是学PYTHON.怎么学都是学,按照基础学也好,按照例子增加印象也好,反正都是学 import urllib import urllib.request data={} data['word']=' ...
- Java豆瓣电影爬虫——抓取电影详情和电影短评数据
一直想做个这样的爬虫:定制自己的种子,爬取想要的数据,做点力所能及的小分析.正好,这段时间宝宝出生,一边陪宝宝和宝妈,一边把自己做的这个豆瓣电影爬虫的数据采集部分跑起来.现在做一个概要的介绍和演示. ...
- C# 使用 Abot 实现 爬虫 抓取网页信息 源码下载
下载地址 ** dome **
随机推荐
- Scrapy抓取jobbole数据
1.python版本3.6.1 2.python编辑器:JetBrains PyCharm 2.安装virtualenvwrapper-win pip3 install virtualenvwrapp ...
- 6-基于TMS320C6678、FPGA XC5VSX95T的6U CPCI 8路光纤信号处理卡
基于TMS320C6678.FPGA XC5VSX95T的6U CPCI 8路光纤信号处理卡 1.板卡概述 本板卡由我公司自主研发,基于CPCI架构,符合CPCI2.0标准,采用两片TI DSP T ...
- 部署Tomcat服务器
部署Tomcat服务器,具体内容如下: 1.安装部署JDK基础环境; 2.安装部署Tomcat服务器; 3.创建JSP测试页面,文件名为test.jsp,显示服务器当前时间. 然后客户机访问Web服务 ...
- zabbix 4.2 发送警告邮件Python脚本
#!/usr/bin/env python#-*- coding: UTF-8 -*-import os,sysimport getoptimport smtplibfrom email.MIMETe ...
- WTSQueryUserToken failed
https://www.cnblogs.com/tabjin/articles/11057663.html 令牌错误 https://www.cnblogs.com/FCoding/archive/2 ...
- RMQ HelloWorld
原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11791681.html Project Directory Maven Dependency < ...
- php strchr()函数 语法
php strchr()函数 语法 作用:搜索字符串在另一字符串中的第一次出现.直线电机哪家好 语法:strchr(string,search,before_search); 参数: 参数 描述 st ...
- 科讯使用的:ckeditor编辑器.复制word图片.一直沾不上去.谁有好的解决办法呢
在之前在工作中遇到在富文本编辑器中粘贴图片不能展示的问题,于是各种网上扒拉,终于找到解决方案,在这里感谢一下知乎中众大神以及TheViper. 通过知乎提供的思路找到粘贴的原理,通过TheViper找 ...
- jsp选择文件夹上传
文件夹数据库处理逻辑 publicclass DbFolder { JSONObject root; public DbFolder() { this.root = new JSONObject(); ...
- [CSP-S模拟测试]:巨神兵(状压DP)
题目描述 欧贝利斯克的巨神兵很喜欢有向图,有一天他找到了一张$n$个点$m$条边的有向图.欧贝利斯克认为一个没有环的有向图是优美的,请问这张图有多少个子图(即选定一个边集)是优美的?答案对$1,000 ...