可以看到一个DIV下放一个广播剧的信息,包括名称和地址,第一步我们先收集所有广播剧的收听地址:

# 用requests的get方法访问
novel_list_resp = requests.get("这里放URL的地址")
# 利用上一步访问返回的结果生成一个BeautifulSoup对象
opera_soup = BeautifulSoup(novel_list_resp.text, "lxml")
# 获取所有class="program-item"的div
opera_soup.find_all("div", class_="program-item")

接着我们遍历这些div,获取每个广播剧的链接和名称:
# 找到div中的a标签,获取每个广播剧的链接
opera_link = domain + div.find("a").get('href')
# 获取每个广播剧的名称
title = div.find("div", class_="title").string

我们点击一个广播剧进去,在HTML中可以看到在ul中,每个li里都有一集的播放链接,并且是按顺序的。

代码中我们继续用之前的方法访问单个广播剧地址,来获取剧集的list:
# 访问单个广播剧页面
novel_view_resp = requests.get(opera_link)
# 利用上一步访问返回的结果生成一个BeautifulSoup对象
view_soup = BeautifulSoup(novel_view_resp.text, "lxml")
# 首先定位h2标签,然后获取h2的下一个ul标签(直接找ul的话会找到其他的ul),然后获取所有a标签
list_a = view_soup.find('h2').find_next_sibling('ul').find_all('a')
# 接着遍历a标签,把每集的地址取出来
view_link = domain + a.get('href')

我们继续看一个单集的播放的HTML,source标签里就是最终的资源地址了,一个MP4文件:

# 打开单集的播放页面
play_resp = requests.get(view_link)
play_soup = BeautifulSoup(play_resp.text, "lxml")
# 获取资源下载地址
src = play_soup.find('source').attrs['src']

现在我还不想下载,我希望先试听确认喜欢后再下载,所以我把下载地址存到一个txt里,一个广播剧存一个txt:
name = file_path + name + '.txt'
with open(name, 'wb') as f:
f.write(content)

由于编码问题,在文件最上加上以下代码:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

运行效果:

下载的MP4的代码:

# 使用requests的get方法访问下载链接
r = requests.get(url)
# 将访问返回二进制数据内容保存为MP4文件
with open(name, 'wb') as f:
f.write(r.content)

最终的运行结果:

源码地址:https://github.com/songzhenhua/rti_opera/blob/master/rti_opera.py

BeautifulSoup参考地址:
https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html#attributes
http://www.cnblogs.com/zhaof/p/6930955.html

最新文章

  1. 如何获取ResultSet的行数和列数
  2. struts2.3.16所需的基本的jar包
  3. Javascript事件绑定的几种方式
  4. SQL Server中CURD语句的锁流程分析
  5. C#一般处理程序获取Session
  6. Linux命令之进程的管理
  7. 最经常使用的两种C++序列化方案的使用心得(protobuf和boost serialization)
  8. SDL2源码分析8:视频显示总结
  9. 转 Goldengate常用命令
  10. C# readonly
  11. [日常] Codeforces Round #440 Div.2 大力翻车实况
  12. Oracle RAC环境下定位并杀掉最终阻塞的会话-续
  13. Hibernate原理及应用
  14. Eclipse使用Maven创建Web时错误:Could not resolve archetype
  15. Kali学习笔记36:AVWS10的使用
  16. BZOJ.3546.[ONTAK2010]Life of the Party(二分图匹配 ISAP)
  17. 使用 pkg 打包分发 nodejs 应用
  18. shell 网络状态查询 ping curl telnet
  19. 【html】优酷视频去广告代码
  20. Combinations leetcode java

热门文章

  1. web.xml中Filter的作用
  2. 记一次重装系统后恢复EFS加密文件过程
  3. 应对STM32 Cortex-M3 Hard Fault异常
  4. 第26章 FMC—扩展外部SDRAM
  5. qsort()与sort的用法(收藏)
  6. 去掉CodeIgniter URL中的index.php
  7. Swift_初始化
  8. Zabbix——创建网络配置模板
  9. MySQL学习之事务安全
  10. .Net 上传文件到ftp服务器和下载文件