吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3212|回复: 31
收起左侧

[Python 转载] 用python来下载北京广播网节目

[复制链接]
创造太阳 发表于 2020-4-26 01:28
本帖最后由 创造太阳 于 2020-4-26 01:34 编辑

一个悬赏帖子求助北京广播网节目下载,主要打算帮老人下载点节目,就简单写了一下。
@梦入寒冬 ,思路和方法就给你写出来了。主要利用python中的requests库的get函数来实现。
1.先打开网址:http://www.rbc.cn/audio/kaixinchaguanwanchang_1.shtml
微信图片_20200426005523.png
可以看到每个节目后边都有一个日期,如20200426这样的,这个是很重要!将来需要用到!
2.打开一个节目的网址,然后右键选择“检查”或者“审查元素”,快捷键“Ctrl”+“shift”+“i”,进行播放节目。
建议最好在打开“检查”后再刷新一下页面,这个网页会自动播放。
然后观察返回的数据,简单的说就是最长的那个。
微信图片_20200426005804.png
3.然后选中这个,单击后出来详细信息。
微信图片_20200426005905.png
4.找到资源的实际地址,然后再在浏览器中打开。
微信图片_20200426010236.png
5.你会发现:在资源实际地址中可以发现,资源变更的只有蓝色框中的日期红色框中的内容没用,可以直接删除。

实操部分:
所以下载资源就通过拼接网址来进行了。
先观察要爬取页面的网址:http://www.rbc.cn/audio/kaixinchaguanwanchang_1.shtml
第二页:http://www.rbc.cn/audio/kaixinchaguanwanchang_1_2.shtml
最后一页:http://www.rbc.cn/audio/kaixinchaguanwanchang_1_38.shtml
可以明显看出来网页2-38页都是有规律的,所以可以利用python来拼接网址,然后来提取节目的名称。
之后再用xpath提取节目名称,再用正则表达式来提取日期,用来拼接最后的实际资源地址。
代码如下:
[Python] 纯文本查看 复制代码
# -- coding: utf-8 --
# 导入需要的包
import time    #导入time库
import requests    #导入requests库
from lxml import etree  #导入etree
import re  #导入re库



headers = {
    "User-Agent" : "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"
}    #设置请求头以突破网站反爬,该网站好像没设置反爬,个人习惯
all_times = []    #定义一个空列表all_times来准备装爬取的信息
url = "http://www.rbc.cn/audio/kaixinchaguanwanchang_1.shtml"    #第一页的网址
res = requests.get(url,headers=headers).text    #用requests库的get函数来访问网址,并将数据转变为text文本格式数据,然后传递给变量res
time.sleep(3)    #设定延时3秒,适当休息,以防对网站服务器造成影响
res_xpath = etree.HTML(res)    #将变量res中存储的数据转换为xpath格式
times = res_xpath.xpath('/html/body/div[1]/div[3]/div/div[4]/div[18]/div/ul/li/a/text()')    #用xpath来提取节目名字
for t in times:    #依次循环列表times来提取节目名称
    all_times.append(t)    #将每个节目名称装入到空列表all_times
for i in range(2,39):    #拼接第2页到最后一页(38)
    url = "http://www.rbc.cn/audio/kaixinchaguanwanchang_1_" + str(i) + ".shtml"    #拼接网址
    res = requests.get(url,headers=headers).text   #注释参考上边部分
    time.sleep(5)
    res_xpath = etree.HTML(res)
    times = res_xpath.xpath('/html/body/div[1]/div[3]/div/div[4]/div[18]/div/ul/li/a/text()')
    # print(times)
    for t in times:
        all_times.append(t)
for all_time in all_times:     #依次循环列表all_times,就是之前装了所有节目名称的列表
    file = re.findall('[0-9]\d*',all_time)    #用正则表达式提取数字
    file = "".join(file)    #将提取出来的数字列表转换为str格式来进行拼接
    print("正在下载" + file)   #显示“正在下载”+编号
    url = "http://playback.rbc.cn/audioD/fm876/" + file + "/2130001800_mp4/213000_1800_96K.mp4"   #拼接实际网址
    time.sleep(5)
    res = requests.get(url,headers=headers).content    #利用requests库的get函数来获得资源网址的二进制数据
    with open(file+".mp4","wb") as f:    #新建一个mp4文件,名字是节目日期    注意:是mp4而不是mp3,资源是MP4格式
        f.write(res)    #写入二进制数据
        print(file + "保存完成")    #保存完成



具体代码就是这个,要爬取其他节目信息就按照这个思路和方法来自己找吧。

打包的话,用pythinller来打包就可以,要是只是自己用的话,代码速度会更快点。



点评

非常感谢!这个还有教程去学习Python,太棒了,已经关注了那个B站教程。  发表于 2020-4-26 09:18

免费评分

参与人数 11吾爱币 +16 热心值 +10 收起 理由
混子 + 1 + 1 我很赞同!
Mrmusclee + 1 + 1 谢谢@Thanks!
fengoto + 2 热心回复!
苏紫方璇 + 5 + 1 用心讨论,共获提升!
wjdxx1985 + 1 + 1 女朋友呢
mengqiu + 1 + 1 难能可贵的助人为乐的精神,点赞。
7号 + 1 + 1 谢谢@Thanks!
梦入寒冬 + 1 + 1 热心回复!
随遇而安8 + 1 + 1 我小白表示头一回看懂大佬的代码,文章思路清晰
王星星 + 1 + 1 谢谢@Thanks!
joneqm + 1 + 1 用心讨论,共获提升!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 创造太阳 发表于 2020-4-26 01:43
sutramusic 发表于 2020-4-26 01:41
这个说明很简单,应该也可以适用于其它的类似下载片段。

下载ts文件的片段需要先下载m3u8文件,提取m3u8中的信息拼接后再下载。
XinSong 发表于 2020-4-26 01:36
sutramusic 发表于 2020-4-26 01:41
这个说明很简单,应该也可以适用于其它的类似下载片段。
青铜时代号 发表于 2020-4-26 01:46
这是大佬
毒瘤 发表于 2020-4-26 02:23
厉害了。大佬,我只是看看,代码虽然被你写出来了,可我也打包不来!
小白兔白又白腿 发表于 2020-4-26 05:00
感谢分享!!!!!!!!!!
xxscwsrym 发表于 2020-4-26 05:53
感谢大佬。
OO2OO 发表于 2020-4-26 08:06
强大,强大,谢谢分享
头像被屏蔽
王星星 发表于 2020-4-26 08:19
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-22 14:28

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表