Python君,快给朕来一部电影

第一时间获取 Python 技术干货!

阅读文本大概需要 6 分钟。

目 标

今天的目标很简单,就是想下载一些「微电影」回家过年。

以国内微电影活跃度最高的社区,「新片场」为例,爬取站内所有的高清电影信息保存到 MongoDB 数据库,并使用异步函数下载到本地。

准 备 工 作

首先,需要下载并配置好 MongoDB 数据库,并安装「mongoengine」库。

由于下载文件是一个 IO 密集型操作,这里用到了协程搭配异部请求,需要安装「aiohttp」库。

# 更方便管理 Monogodb

pip3installmongoengine

# 异步http

pip3installaiohttp

分 析 思 路

首先我们打开新片场的影视作品首页,发现默认是按热门度排序的。

「http://www.xinpianchang.com/channel/index/sort-like?from=tabArticle」

由于页面元素比较简单,使用「xpath」可以很快的定位到每一条影片的基本数据,包含「影片名称、类型、播放量、点赞量、封面图」等。

# 电影标题

title = film_element.xpath('.//div[@class="video-con-top"]/a/p/text()')[0]

# 电影类型

type = remove_space('/'.join(

film_element.xpath('.//div[@class="new-cate"]/span[@class="fs_12 fw_300 c_b_9"]/text()')))

# 播放量和点赞数

play_num = film_element.xpath('.//span[@class="fw_300 icon-play-volume"]/text()')[0]

like_num = film_element.xpath('.//span[@class="fw_300 c_b_9 icon-like"]/text()')[0]

# 封面图片

img_cover = film_element.xpath('.//a[@class="video-cover"]/img/@_src')[0]

通过分析,可以发现影片的播放地址中的变量就是影片的 id,被放置在 li 标签的「data-articleid」属性下。

最后就是要获取到影片的下载地址。

当我们使用 Chrome 插件「Toggle JavaScript」禁用 JS 后,发现影片没法正常播放,说明影片播放页面关键数据是动态加载的。

打开 Network Tab,刷新当前页面。

通过观察,发现页面的部分关键数据是通过下面的一个地址发送的 GET 请求。

「https://openapi-vtom.vmovier.com/v3/video/5C4A8377173CE?expand=resource,resource_origin?」

另外,请求地址中包含的一个动态字符串「5C4A8377173CE」,隐藏于源码中的JS 模块中。

这里可以通过正则表达式匹配到「vid」后面的字符串,就可以组装成我们需要的地址,通过这个地址就可以获取影片的下载地址。

获取到数据之后,定义好一个 Model,然后就可以插入到数据库中了。

待爬取到的影片数据之后,就可以使用「asyncio + aiohttp」异步函数下载影片数据到本地。

喝一杯咖啡回来,Python 君已经将几千部微电影下载到本地了。

我已经将全部源码上传到后台上,公众号回复「新片场」即可获得。

如果你觉得文章还不错,请大家点赞分享下。你的肯定是我最大的鼓励和支持。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190131G0053H00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券