1.前言
好久就想出一期抖音爬虫教程了,也刚好很多粉丝都在私信我这个抖音应该怎么爬。所以今天就出一期抖音的教程!需要源代码的也后台私信我就行!
2.开发工具
Python版本:3.6.4
相关模块:
requests模块;
execjs模块;
lxml模块;
click模块;
prettytable模块;
以及一些python自带的模块。
nodejs版本:v10.15.3
3.环境以及教程
安装Python并添加到环境变量,pip安装需要的相关模块即可。
4.关于爬取抖音的一些原理
简单介绍一下实现的原理吧,首先随便搞个用户id,然后进入对应的抖音主页:
https://www.amemv.com/share/user/{用户id}
注意,用户id不等于用户抖音号,而是类似这样的uid(即你可以在分享链接中看到):
例如:
然后抓取一下用户的主页数据:
response = self.session.get(self.user_url.format(userid), headers=self.headers)
html = response.text
for key, value in self.font_dict.items():
if key in html:
html = html.replace(key, value)
assert 'dytk' in html
dytk = re.findall(r"dytk: '(.*?)'", html)[0]
tac = re.findall(r"<script>tac='(.*?)'</script>", html)[0]
html = etree.HTML(html)
nickname = html.xpath('//p[@class="nickname"]/text()')[0]
douyinid = ''.join(html.xpath('//p[@class="shortid"]/i/text()'))
num_followers = ''.join(html.xpath('//span[@class="follower block"]/span[1]//text()')).strip()
num_videos = ''.join(html.xpath('//div[@class="user-tab active tab get-list"]/span/i/text()'))
其中dytk和tac这两个参数是必要的,其他数据是给代码使用者看的,用于确定自己输入的用户id是否正确,效果类似这样:
接着,我们可以通过请求如下接口来获取用户的所有视频作品数据:
https://www.iesdouyin.com/web/api/v2/aweme/post/
需要携带的参数如下:
params = {
'user_id': userid,
'sec_uid': '',
'count': '1000',
'max_cursor': '0',
'aid': '1128',
'_signature': signature,
'dytk': dytk
}
signature需要根据userid, tac和ua来计算.
请求这个接口可以直接返回所有视频作品的下载链接,所以只需要再写个视频下载的小脚本就ok啦:
'''视频下载'''
def __download(self, download_url, savename, savedir='.'):
print('[INFO]: 正在下载 ——> %s' % savename)
if not os.path.exists(savedir):
os.mkdir(savedir)
with closing(self.session.get(download_url, headers=self.ios_headers, stream=True, verify=False)) as response:
total_size = int(response.headers['content-length'])
if response.status_code == 200:
label = '[FileSize]:%0.2f MB' % (total_size/(1024*1024))
with click.progressbar(length=total_size, label=label) as progressbar:
with open(os.path.join(savedir, savename+'.mp4'), "wb") as fp:
for chunk in response.iter_content(chunk_size=1024):
if chunk:
fp.write(chunk)
progressbar.update(1024)
5.运行展示
在终端运行如下命令即可:
python douyin.py
到这里就大功告成了!
近期有很多朋友通过私信咨询有关Python学习问题。为便于交流,点击蓝色自己加入讨论解答资源基地