爬虫初体验: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
爬虫初体验:Python+Requests+BeautifulSoup抓取广播剧的更多相关文章
- python 爬虫(一) requests+BeautifulSoup 爬取简单网页代码示例
以前搞偷偷摸摸的事,不对,是搞爬虫都是用urllib,不过真的是很麻烦,下面就使用requests + BeautifulSoup 爬爬简单的网页. 详细介绍都在代码中注释了,大家可以参阅. # -* ...
- Python requests 多线程抓取 出现HTTPConnectionPool Max retires exceeded异常
https://segmentfault.com/q/1010000000517234 -- ::, - oracle - ERROR - data format error:HTTPConnecti ...
- Python爬虫之requests+正则表达式抓取猫眼电影top100以及瓜子二手网二手车信息(四)
requests+正则表达式抓取猫眼电影top100 一.首先我们先分析下网页结构 可以看到第一页的URL和第二页的URL的区别在于offset的值,第一页为0,第二页为10,以此类推. 二.< ...
- Python爬虫实战八之利用Selenium抓取淘宝匿名旺旺
更新 其实本文的初衷是为了获取淘宝的非匿名旺旺,在淘宝详情页的最下方有相关评论,含有非匿名旺旺号,快一年了淘宝都没有修复这个. 可就在今天,淘宝把所有的账号设置成了匿名显示,SO,获取非匿名旺旺号已经 ...
- 用python实现的抓取腾讯视频所有电影的爬虫
1. [代码]用python实现的抓取腾讯视频所有电影的爬虫 # -*- coding: utf-8 -*-# by awakenjoys. my site: www.dianying.atim ...
- python2.7 爬虫初体验爬取新浪国内新闻_20161130
python2.7 爬虫初学习 模块:BeautifulSoup requests 1.获取新浪国内新闻标题 2.获取新闻url 3.还没想好,想法是把第2步的url 获取到下载网页源代码 再去分析源 ...
- Python爬虫工程师必学——App数据抓取实战 ✌✌
Python爬虫工程师必学——App数据抓取实战 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌) 爬虫分为几大方向,WEB网页数据抓取.APP数据抓取.软件系统 ...
- Python爬虫工程师必学APP数据抓取实战✍✍✍
Python爬虫工程师必学APP数据抓取实战 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大 ...
- Python爬虫工程师必学——App数据抓取实战
Python爬虫工程师必学 App数据抓取实战 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大 ...
随机推荐
- 陈正冲老师讲c语言之内存的申请malloc() 和释放free()
1.如何使用 malloc 函数 不要莫名其妙,其实上面这段小小的对话,就是malloc的使用过程.malloc是一个函数,专门用来从堆上分配内存.使用malloc函数需要几个要求: 内存分配给谁?分 ...
- .net 网站中如何动态播放音乐,页面如何播放音乐
向别人请教有好处也有坏处,好处是你可以相对比较快的知道要点,坏处就是你TM的发现你弄了那么久都是白弄. 昨天今天一直在找一个问题的解决方案,我的问题描述大概是这样子的:我用vs2012开发的.net网 ...
- Office365学习笔记—Xslt自定义列表视图
1,在Office365中需要添加自定义的视图!用Spd添加视图,这儿我添加一个testView! (1)打开testView.aspx将</ZoneTemplate>节点中的内容全部删除 ...
- unittest单元测试框架之unittest工作原理(一)
1.Unittest 核心组件 test case.test suite.test runner.test fixture 2.unittest 静态图 Testcase:一个 testcase 就是 ...
- synchronized 控制并发(活动秒杀)
1.首先我们新建一个Controller用于秒杀: package com.imooc.Controller; import com.imooc.service.impl.SeckillService ...
- 360极速浏览器用ie8模式打开网页(360浏览器同理)
在访问年代久远的的网页时经常会遇到兼容性的问题,用360浏览器(或360极速浏览器)中通过设置可解决. 在360极速浏览器中分别依次选择:选项->高级设置->内核模式->内核切换设置 ...
- 基于MySql和Sails.js的RESTful风格的api实现
Sails.js是类似于express的node后台框架,她面向数据库的特性使得面向数据库的服务器的搭建变得特别简单快捷. 现在网上关于Sails的教程大多是基于V0.12版本的,但是现在Sails的 ...
- 浅谈vue,小程序,react基础绑定值
最近一直在用react开发项目,碰见的问题千千万,很多,但是都殊途同源,唯一区别大的就是没有像vue的双向绑定,也没有小程序的单向方便,比如: vue v-modal="msg" ...
- DataSet和泛型之间相互转换
取数据的时候,存储过程返回了多个结果集,后台用DataSet去接收这几个结果集,然后接收之后,需要将结果集转换为不同的实体,于是下面的代码便出现了. /// <summary> /// 将 ...
- vue调用豆瓣API加载图片403问题
"豆瓣API是有请求次数限制的”,这会引发图片在加载的时候出现403问题,视图表现为“图片加载不出来”,控制台表现为报错403. 其实是豆瓣限制了图片的加载,我自己用了一个办法把图片缓存下来 ...