爬虫初体验:Python+Requests+BeautifulSoup抓取广播剧
可以看到一个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
最新文章
- this指向
- IE9下WebUploader上传图片跨域问题
- hibernate(十)双向关联关系的CRUD
- ul+li标签制作表格
- linux命令集——<;一>;目录处理命令
- C99标准中的部分新特性
- MySQL使用rand函数实现随机数
- SSMS2008插件开发(3)--部署调试SSMS2008插件
- php笔记(八)PHP类与对象之抽象类
- 基于fiddler的APP抓包及服务端模拟
- 201521123080《Java程序设计》第13周学习总结
- IIC-BUS INTERFACE
- C语言(记录)——内存相关_2:内存的编址与管理
- opencv配置
- Java 图片爬虫,java打包jar文件
- vue页面传参
- Android Satudio的使用记录
- mysql 2006错误 导入时
- IntelliJ idea 如何打开左边项目展开栏
- PHP获取目录下面所有文件和文件夹
热门文章
- 第三章.搭建MyBatis工程环境
- Entity Framework——执行sql语句
- Selenium基础知识(详解IDE命令、css及xpath定位一)
- 开源项目之kisso
- hdu 1010(迷宫搜索,奇偶剪枝)
- iOS8以后UIAlertView和UIActionSheet两种alert页面都将通过UIAlertController来创建
- 全渠道价值链整合云服务 B2B SOLOMO(组图)
- ORACLE_HOME_LISTNER is not SET, unable to auto-start Oracle Net Listener
- Vue和element-ui结合的简单使用
- java web多组件协作实现用户登录验证