Python爬虫实战 – 爬取视频网站的下载链接

网络爬虫

什么是爬虫?为什么要使用爬虫?

爬虫(即 网络爬虫 )是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。 (摘取自百度百科)

使用爬虫可以方便地获得某个网页,或者某系列网页一些规则下的内容,由按照规则自动执行地脚本来代替手动查询内容等繁琐工作。

将要使用到的技术或知识:


一、第三方库Beautiful Soup安装

Beautiful Soup: Python 的第三方插件用来提取 xml 和 HTML 中的数据。 官方网站

1、安装Beautiful Soup

打开 cmd(命令提示符),进入到 Python(Python2.7版本)安装目录中的 scripts 下,输入 dir 查看是否有 pip.exe, 如果用就可以使用 Python 自带的 pip 命令进行安装,输入以下命令进行安装即可:

pip install beautifulsoup4

2、测试是否安装成功

编写一个 Python 文件,输入:

import bs4
print bs4
# 运行该文件,如果能够正常输出则安装成功。

二、分析网页

实战爬取 樱花动漫 Top100动漫的下载链接

(注意:仅供学习思路,如学习请爬取其他网站,尊重他人的服务器,也请自重)

0、首先进入主页

进入主页后,可以发现这是一个动漫粒度的列表页,我们查看列表出的网页源代码。  列表处 – 右键 – 检查  

Top100列表页
Top100列表页

1、分析Top页面

先分析网站层级关系,可以发现在class=”topli”的div标签下,有无序列表ul>li来存放每个动漫的入口,使用a 标签的href属性指定了当前动漫详细页面的url 如:domain/view/1794.html(如下图所示)。使用下面代码来获取这些li标签(   其中domain为该网站域名 http://www.imomoe.in/  

divs = soup.findAll(name="div", attrs={"class": "topli"}) topk = divs[0].ul.findAll(name="li") # 至此,我们的topk已经获取到了所有的动漫的详情页链接
Top页面分析

2、分析详情页

我们随便点进去一个动漫,可以发现动漫详情页,继续查看源代码,可以发现,这一层的结构和上一层的几乎一致。

动漫详情页

3、分析视频播放页

这一步的目标,是通过<VIDEO>等标签来分析出视频的下载链接,随便点开一集,检查源代码,可以发现视频是通过一个iframe标签修饰的,而且标签内正好包含下载链接。

其中Iframe标签的src属性中包含着下载链接: https://saas.jialingmm.net/code.php?type=flv&vid=https://gss3.baidu.com/6LZ0ej3k1Qd3ote6lo7D0j9wehsv/tieba-smallvideo/12846619_6ba8b4e916d2137e040897949fd54e3b.mp4&userlink=http%3A%2F%2Fwww.imomoe.in%2Fplayer%2F7542-0-0.html&adress=HeBei 

视频播放页

4、尝试爬取

我们通过CMD的curl命令来查看视频播放页的iframe标签(如下图),却发现其中的src为空,并没有像浏览器访问时候所显示的URL,那么,我们如何爬取下载链接呢?

进一步分析,这个iframe标签的src,既然不是访问的时候存在的,则是通过js动态生成的,顺着这个思路,我们寻找一个比较像的js文件,其实就在iframe标签后面(如下图)

我们通过主机域名+js的src,访问,可以发现这个js文件包含这个动漫的所有下载链接,如下:

JS文件
JS文件内容

var VideoListJson = [[‘优酷’, [‘\u7B2C01\u96C6$https://gss3.baidu.com/6LZ0ej3k1Qd3ote6lo7D0j9wehsv/tieba-smallvideo/12846619_6ba8b4e916d2137e040897949fd54e3b.mp4$flv’, ‘\u7B2C02\u96C6$https://gss3.baidu.com/6LZ0ej3k1Qd3ote6lo7D0j9wehsv/tieba-smallvideo/12846619_26f1a781b59cddedda710b379d519a45.mp4$flv’, ‘\u7B2C03\u96C6$https://gss3.baidu.com/6LZ0ej3k1Qd3ote6lo7D0j9wehsv/tieba-smallvideo/12846619_14a61ab058bb8baa34fe10afab0f6d9d.mp4$flv’, ‘\u7B2C04\u96C6$https://gss3.baidu.com/6LZ0ej3k1Qd3ote6lo7D0j9wehsv/tieba-smallvideo/25330672_fe7f827fc305a64ffad425635f0a85dc.mp4$flv’, ‘\u7B2C05\u96C6$https://gss3.baidu.com/6LZ0ej3k1Qd3ote6lo7D0j9wehsv/tieba-smallvideo/25330672_45fdd31b21780f648f99169fef713bf5.mp4$flv’, ‘\u7B2C06\u96C6$https://gss3.baidu.com/6LZ0ej3k1Qd3ote6lo7D0j9wehsv/tieba-smallvideo/25330672_d2b1aeb2de9fd044cf797f163f726073.mp4$flv’, ‘\u7B2C07\u96C6$https://gss3.baidu.com/6LZ0ej3k1Qd3ote6lo7D0j9wehsv/tieba-smallvideo/25330672_53044ba7dd316163808c4c54f8b62bce.mp4$flv’, ‘\u7B2C08\u96C6$https://gss3.baidu.com/6LZ0ej3k1Qd3ote6lo7D0j9wehsv/tieba-smallvideo/25330672_c69961fd5359c8827d0695d89e64a1f3.mp4$flv’, ‘\u7B2C09\u96C6$https://gss3.baidu.com/6LZ0ej3k1Qd3ote6lo7D0j9wehsv/tieba-smallvideo/25330672_eccb48c876b6b7f0b26e58c08b1d7d6e.mp4$flv’, ‘\u7B2C10\u96C6$https://gss3.baidu.com/6LZ0ej3k1Qd3ote6lo7D0j9wehsv/tieba-smallvideo/607272_f961e61c07e48e0bcb834e5577837990.mp4$flv’, ‘\u7B2C11\u96C6$https://gss3.baidu.com/6LZ0ej3k1Qd3ote6lo7D0j9wehsv/tieba-smallvideo/607272_7336ab3e3ae49ce9eae3af5d33d64572.mp4$flv’, ‘\u7B2C12\u96C6$https://gss3.baidu.com/6LZ0ej3k1Qd3ote6lo7D0j9wehsv/tieba-smallvideo/607272_3b11ef60d8ec1cd02fa2f2f2f8e08b95.mp4$flv’, ‘\u7B2C13\u96C6$https://gss3.baidu.com/6LZ0ej3k1Qd3ote6lo7D0j9wehsv/tieba-smallvideo/607272_4fcf619108604f6d9e01687e5c69a2bd.mp4$flv’]], [‘优酷’, [‘\u7B2C01\u96C6$https://ck-qq.com/v/isgc9ZhZ$zw’, ‘\u7B2C02\u96C6$https://ck-qq.com/v/OmVVtwys$zw’, ‘\u7B2C03\u96C6$https://ck-qq.com/v/5ufXonER$zw’, ‘\u7B2C04\u96C6$https://ck-qq.com/v/a4csbpC5$zw’, ‘\u7B2C05\u96C6$https://ck-qq.com/v/3tuLdesn$zw’, ‘\u7B2C06\u96C6$https://ck-qq.com/v/GvY6JTTf$zw’, ‘\u7B2C07\u96C6$https://ck-qq.com/v/JsTQI54S$zw’, ‘\u7B2C08\u96C6$https://ck-qq.com/v/D8eKu51h$zw’, ‘\u7B2C09\u96C6$https://ck-qq.com/v/ngr3oW92$zw’, ‘\u7B2C10\u96C6$https://ck-qq.com/v/mW79A1RH$zw’, ‘\u7B2C11\u96C6$https://ck-qq.com/v/OCzFYdfx$zw’, ‘\u7B2C12\u96C6$https://ck-qq.com/v/vyfKm4Hv$zw’, ‘\u7B2C13\u96C6$https://ck-qq.com/v/xPhMxCiV$zw’]]],
urlinfo = ‘http://’ + document.domain + ‘/player/7542-‘

对于上述JS中包含下载链接,我们可以通过正则去分割出下载链接

video_urls = list(filter(lambda s: s[:4] == 'http', js_text.split(r'$')))
# 其中js_text为上面的js文件内容
运行结果

最后我们再将链接存到数据库即可。

数据库数据

三、附件

源代码Py文件: 蓝奏云下载

其他文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注