采集练习(十一) php 获得电视节目预告---数据来自电视猫
昨天写了个采集搜视网的电视节目预告,刚好今天有心情,想采下其他网站提供的节目预告,发现 电视猫wap版 的提供的节目预告也蛮好采(需要正则)....感谢移动互联网!
电视猫的 wap版地址是 http://wap.tvmao.com/ 点击相应的电视台 进去就能看到 相应的 节目预告。
如:http://wap.tvmao.com/cctv.jsp 里的就是 央视的 相应频道列表 点击 相应的 频道 就可以看到 该频道的 的节目预告;
http://wap.tvmao.com/program.jsp?p=CCTV&c=CCTV1&w=6 就是 CCTV-1 周六 的节目预告 。
分析 页面html 得知 /program.jsp?p=CCTV&c=CCTV1 来自 http://wap.tvmao.com/cctv.jsp 页面的频道列表里 而 w=6 表示 周六
下面是采集央视的测试代码:
<?php
/**
* Created by JetBrains PhpStorm.
* User: keygle
* Date: 13-8-3
* Time: 下午2:04
* From www.cnblogs.com/keygle
*/ /**
* [curl 带重试次数]
* @param [type] $url [访问的url]
* @param [type] $post [$POST参数]
* @param integer $retries [curl重试次数]
* @return [type] [description]
*/
function curlGetHtml($url, $post = null, $retries = 3){
$ch = curl_init();
if(is_resource($ch) === true){
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_REFERER, "http://wap.tvmao.com/");
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36");
if(isset($post) === true){
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, (is_array($post) === true) ? http_build_query($post, "", "&"): $post);
}
$result = false;
while(($result === false) && (--$retries > 0)){
$result = curl_exec($ch);
}
curl_close($ch);
}
return $result;
} /**
* [getTvUrl 获得电视台链接数组]
* @param [type] $tvListHtml [页面html ]
* @return [type] [description]
*/
function getTvUrl($tvListHtml){
$tvListArray = array();
//正则匹配 url 和 电视台名
preg_match_all('#<a href="/([^"]+)">(.*?)</a><br/>#i', $tvListHtml, $matches);
foreach ($matches[1] as $key => $value) {
$tvListArray[$key]['url'] ="http://wap.tvmao.com/".html_entity_decode($value); //html 实体转换
$tvListArray[$key]['name'] = $matches[2][$key];
}
return $tvListArray;
} /**
* [getPlayItems 获得电视节目预告]
* @param [type] $tvUrl [description]
* @return [type] [description]
*/
function getPlayItems($tvUrl){
$playItems = array();
$itemHtml = curlGetHtml($tvUrl);
preg_match_all("#r/>([^<]+)?<b#i", $itemHtml, $matches);
array_shift($matches[1]); //去掉数组的第一个
$playItems = $matches[1];
return $playItems;
} //获得央视 的所有频道
$url = "http://wap.tvmao.com/cctv.jsp";
$tvListHtml = curlGetHtml($url);
$tvListArray = getTvUrl($tvListHtml);
print_r($tvListArray);
// 获得cctv1的 周六 节目预告
$tvUrl = "http://wap.tvmao.com/program.jsp?p=CCTV&c=CCTV1&w=6";
$playItems = getPlayItems($tvUrl);
print_r($playItems);
采集练习(十一) php 获得电视节目预告---数据来自电视猫的更多相关文章
- 采集练习(十) php 获得电视节目预告---数据来自搜视网
前几天逛湖南卫视,偶然间发现它的网站上也有节目预告,一看源码,居然是来自搜视网的xml,于是就想获得它的数据(页面直接ajax加载估计会有跨域问题) 前阵子也写过另一个方法获得 节目预告(采集练习(七 ...
- 使用GNU/Linux播放电视节目
目前,生活中很多事情都可以在电脑前完成,读书.写程序.听音乐.看视频等.如果也可以在电脑上收看有线电视节目的话,那就更好了.为此,我购买了圆刚视频采集卡AverMedia C725B.如下图所示. 官 ...
- HDU_2037——最多电视节目问题
Problem Description “今年暑假不AC?” “是的.” “那你干什么呢?” “看世界杯呀,笨蛋!” “@#$%^&*%...”确实如此,世界杯来了,球迷的节日也来了,估计很多 ...
- Ajax-08 跨域获取最新电视节目清单实例
目标一 请求江西网络广播电视台电视节目 URL:http://www.jxntv.cn/data/jmd-jxtv2.html 分析 1.从Http头信息分析得知,器服务端未返回响应头Access-C ...
- 二十一、contextMap中放的常用数据
二十一.contextMap中放的常用数据 request:请求范围的数据.即ServletRequest中的那个Map parameters:请求参数的数据.即request.getParamete ...
- 九度教程第22题——今年暑假不AC(看尽量多的电视节目)
#define _CRT_SECURE_NO_DEPRECATE #include <stdio.h> #include <algorithm> using namespace ...
- 使用PHP的CURL模拟POST采集开了viewstate的asp.net网页数据
用.NET做的网站如果做成POST提交方式,且开了viewstate的话,采集起来有点小繁琐,在此跟大家分享一下做法. 采的难点是必須先取得表單裏面的viewstate和datavalidtion兩個 ...
- 性能测试 基于Python结合InfluxDB及Grafana图表实时采集Linux多主机或Docker容器性能数据
基于Python结合InfluxDB及Grafana图表实时采集Linux多主机性能数据 by:授客 QQ:1033553122 实现功能 1 测试环境 1 环境搭建 3 使用前提 3 使用方法 ...
- 11.采集手机端app企查查上司公司数据(未成功)
---恢复内容开始--- 采集企查查手机端app数据: 1.首先手机端安装app并usb连接电脑端,fiddler监控手机请求数据对数据进行分析抓取. 手机端界面与fiddler界面参照: 2.对获取 ...
随机推荐
- delphi中将 4 个 Byte 合成 1 个 Integer 的五种方法
有4个字节类型的值,用移位或逻辑运算符怎么合成一个整数?比如 $FFEEDDCC.高$FF$EE$DD$CC低 //方法 1: 共用内存procedure TForm1.Button1Click(Se ...
- python发送邮件(转)
SMTP发送邮件 阅读: 90274 SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件.HTML邮件以及带附件的邮件. Python对SMTP支持有smtplib和ema ...
- 2016.7.5 如何在maven中添加所需依赖(只知道jar包的部分名字的情况)
(1)进入官网仓库 http://mvnrepository.com/ (2)输入需要的jar包名 比如这里的jota-time (3)寻找需要的版本,并选取需要的版本 (4)复制需要的maven依赖 ...
- 2016.6.21 将Eclipse中项目部署到tomcat下
新建的web项目,各种都配置好,选择run on server之后,发现运行失败,并不能访问需要的网址.而脱离eclipse,将生成的war文件直接放到tomcat的webapp下时,可以正常访问.所 ...
- Win2003 IIS 安装方法 图文教程
最近水一水 质量不高 见谅 一般大家先安装好win2003系统,图文教程 Win2003 服务器系统安装图文教程要通过控制面板来安装.具体做法为: 1. 进入“控制面板”. 2. 双击“添加或删除程序 ...
- Hadoop实战: Linux报 tmp 磁盘存储不足
Linux 权限真是一大堆呀.在Linux下进行试验,突然来了个tmp磁盘存储不足..... .. .. ..... ... . 然而.我却没有权限给tmp添加容量.......... .. . 仅仅 ...
- Archlinux休眠设置
2017-03-11 更新: 优化部分文字描述; 默认情况下禁用 swap 分区, 当执行休眠操作时先启用 swap 分区, 然后再执行休眠操作(给 /usr/bin/{swapon,swapoff} ...
- ICON小工具如何使用
对于ICON这个小资源,我们可以手动绘制.选择bmp图形的大小,尤其是旁边的选择工具(矩形或者弧形),我们可以通过选择工具挪动我们手动绘制的图标,其实图标只有中间那部分有用,其他没有用.还有最右边色拾 ...
- vim 穿越时空
1. 回到以前的文件状态 :earlier 3m 回到文件3分钟之前的状态 2. 回到以后的文件状态 :later 3m 回到文件3分钟之后的状态 3. 时间单位 s 秒 m 分钟 d ...
- MFC——9.多线程与线程同步
Lesson9:多线程与线程同步 程序.进程和线程是操作系统的重点,在计算机编程中.多线程技术是提高程序性能的重要手段. 本文主要解说操作系统中程序.进程和线程之间的关系,并通过相互排斥对象和事件对象 ...