环境说明
环境:
python 3.7.1
centos 7.4
pip 10.0.1
部署
[root@localhost ~]# python3.7 --version
Python 3.7.1
[root@localhost ~]#
[root@localhost ~]# pip3 install douyin
有时候因为网络原因会安装失败,这时重新执行上面的命令即可,直到安装完成。
导入douyin模块
[root@localhost ~]# python3.7
>>>import douyin
>>>
导入如果报错的话,可能douyin模块没有安装成功。
下面我们开始爬…爬抖音小视频和音乐咯
[root@localhost douyin]# python3.7 dou.py
几分钟后…我们来看看爬的成果
可以看到视频配的音乐被存储成了 mp3 格式的文件,抖音视频存储成了 mp4 文件。
嗯…不错,哈哈。
py脚本
作者说,能爬抖音上所有热门话题和音乐下的相关视频都爬取到,并且将爬到的视频下载下来,同时还要把视频所配的音乐也单独下载下来,不仅如此,所有视频的相关信息如发布人、点赞数、评论数、发布时间、发布人、发布地点等等信息都需要爬取下来,并存储到 MongoDB 数据库。
import douyin
from douyin.structures import Topic, Music
# 定义视频下载、音频下载、MongoDB 存储的处理器
video_file_handler = douyin.handlers.VideoFileHandler(folder='./videos')
music_file_handler = douyin.handlers.MusicFileHandler(folder='./musics')
#mongo_handler = douyin.handlers.MongoHandler()
# 定义下载器,并将三个处理器当做参数传递
#downloader = douyin.downloaders.VideoDownloader([mongo_handler, video_file_handler, music_
file_handler])
downloader = douyin.downloaders.VideoDownloader([video_file_handler, music_file_handler])
# 循环爬取抖音热榜信息并下载存储
for result in douyin.hot.trend():
for item in result.data:
# 爬取热门话题和热门音乐下面的所有视频,每个话题或音乐最多爬取 10 个相关视频。
downloader.download(item.videos(max=10))
由于我这里没有mongodb所以,把这mongodb相关的配置给注释掉了。
代码解读
本库依赖的其他库有:
aiohttp:利用它可以完成异步数据下载,加快下载速度
dateparser:利用它可以完成任意格式日期的转化
motor:利用它可以完成异步 MongoDB 存储,加快存储速度
requests:利用它可以完成最基本的 HTTP 请求模拟
tqdm:利用它可以进行进度条的展示
数据结构定义
如果要做一个库的话,一个很重要的点就是对一些关键的信息进行结构化的定义,使用面向对象的思维对某些对象进行封装,抖音的爬取也不例外。
在抖音中,其实有很多种对象,比如视频、音乐、话题、用户、评论等等,它们之间通过某种关系联系在一起,例如视频中使用了某个配乐,那么视频和音乐就存在使用关系;比如用户发布了视频,那么用户和视频就存在发布关系,我们可以使用面向对象的思维对每个对象进行封装,比如视频的话,就可以定义成如下结构:
class Video(Base):
def __init__(self, **kwargs):
"""
init video object
:param kwargs:
"""
super().__init__()
self.id = kwargs.get('id')
self.desc = kwargs.get('desc')
self.author = kwargs.get('author')
self.music = kwargs.get('music')
self.like_count = kwargs.get('like_count')
self.comment_count = kwarg