image.png

在简书也码了1W多字了,发现还是爬虫类的文章看的人多。
算法工程师现在都啥价位了,你们还在看爬虫→_→

介绍

这次爬的是当下大火的APP--抖音,批量下载一个用户发布的所有视频。
各位也应该知道,抖音只有移动端,官网打开除了给你个APP下载二维码啥也没有,所以相比爬PC网站,还是遇到了更多的问题,也花了更多的时间,不过好在基本实现了,除了一点咱在后面说。

思路梳理

  • 其实如果看了其他博主爬抖音的教程就发现,大部分都是通过fildder手机抓包来获取接口地址等信息,其实不用那么麻烦,我们通过分享选择链接形式就可以获取到信息:

    image.png

  • 然后电脑访问这个链接,就可以打开页面了,不过很快我们就会发现一个问题,电脑访问这个地址发布视频是空的:

    image.png

  • 谷歌Chrome浏览器有一个模拟手机访问的功能,我们选在iPhone X模式来访问页面,果然看到发布的视频了:

    image.png

  • 我们接下来看下后台请求,不多,很快就找到我们需要的视频信息了,也能直接打开观看视频,到这感觉已经成功了一大半了:

    image.png

  • 但很快我们有发现了新问题,可以看到莉哥总共发布了93个作品,但我们实际获取到但链接只有19个。其实我们用过抖音,包括微博这些应用的都知道,很多信息他们不是一次加载完的,当你拖动页面的时候才会继续加载。所以我们尝试上拉页面,就会发现后台又多了一个请求,返回了新加载的视频信息。
    https://www.amemv.com/aweme/v1/aweme/post/?user_id=57720812347&count=21&max_cursor=0&aid=1128&_signature=KRLTTRAdclaWZCKrElzZVykS01&dytk=4830f6e279a5f53872aab9e9dc112d33
    https://www.amemv.com/aweme/v1/aweme/post/?user_id=57720812347&count=21&max_cursor=1530363175000&aid=1128&_signature=KRLTTRAdclaWZCKrElzZVykS01&dytk=4830f6e279a5f53872aab9e9dc112d33
    两个地址除了max_cursor其他都一样,其实就是上一条返回的json数据中的max_cursor就是下个链接中的max_cursor,然后has_more等于1的时候表示还未全部加载,这样逻辑就清楚了,我们只要先判断has_more是否等于1,等于1的时候我们将max_cursor的值传入下一个链接继续访问获取视频地址,直到has_more等于0为止。

    image.png

  • 这样所有视频地址都有了,就开始下载吧!!

    image.png

代码部分

# -*- coding: utf-8 -*-
#date : 2018-07-29
#author : Awesome_Tang
#version : Python 2.7.9from selenium import webdriver
from bs4 import BeautifulSoup
import json
import requests
import sys
import time
import os
import uuid
from contextlib import closing
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)class douyin_spider(object):"""docstring for douyin_spider"""def __init__(self,user_id,_signature,dytk):print '*******DouYin_spider******'print 'Author :     Awesome_Tang'print 'Date   :       2018-07-29'print 'Version:        Python2.7'print '**************************'print ''self.userid = user_idself.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36'}mobile_emulation = {'deviceName': 'iPhone X'}# chrome浏览器模拟iPhone X进行页面访问options = webdriver.ChromeOptions()options.add_experimental_option("mobileEmulation", mobile_emulation)self.browser = webdriver.Chrome(chrome_options=options)self._signature= _signatureself.dytk= dytkself.url = 'https://www.amemv.com/aweme/v1/aweme/post/?user_id=%s&count=32&max_cursor=0&aid=1128&_signature=%s&dytk=%s'%(self.userid,self._signature,self.dytk)def handle_url(self):url_list = [self.url,]self.browser.get(self.url)web_data = self.browser.page_sourcesoup = BeautifulSoup(web_data, 'lxml')web_data = soup.pre.stringweb_data = json.loads(str(web_data))if web_data['status_code'] == 0:while web_data['has_more'] == 1:# 最大加载32条视频信息,has_more等于1表示还未全部加载完max_cursor = web_data['max_cursor']# 获取时间戳url = 'https://www.amemv.com/aweme/v1/aweme/post/?user_id=%s&count=32&max_cursor=%s&aid=1128&_signature=%s&dytk=%s'%(self.userid,max_cursor,self._signature,self.dytk)url_list.append(url)self.browser.get(url)web_data = self.browser.page_sourcesoup = BeautifulSoup(web_data, 'lxml')web_data = soup.pre.stringweb_data = json.loads(str(web_data))else:max_cursor = web_data['max_cursor']# 获取时间戳url = 'https://www.amemv.com/aweme/v1/aweme/post/?user_id=%s&count=32&max_cursor=%s&aid=1128&_signature=%s&dytk=%s'%(self.userid,max_cursor,self._signature,self.dytk)url_list.append(url)else:url_list = []return url_listdef get_download_url(self,url_list):download_url = []title_list = []if len(url_list)> 0:for url in url_list:self.browser.get(url)web_data = self.browser.page_sourcesoup = BeautifulSoup(web_data, 'lxml')web_data = soup.pre.stringweb_data = json.loads(str(web_data))if web_data['status_code'] == 0:for i in range(len(web_data['aweme_list'])):download_url.append(web_data['aweme_list'][i]['video']['play_addr']['url_list'][0])title_list.append(web_data['aweme_list'][i]['share_info']['share_desc'].encode('utf-8'))return download_url,title_listdef videodownloader(self,url,title):size = 0path = title+'.mp4'with closing(requests.get(url, headers = self.headers ,stream=True, verify=False)) as response:chunk_size = 1024content_size = int(response.headers['content-length'])if response.status_code == 200:print '%s is downloading...'%titlesys.stdout.write('[File Size]: %0.2f MB\n' % (content_size/chunk_size/1024))with open(path, 'wb') as f:for data in response.iter_content(chunk_size=chunk_size):f.write(data)size += len(data)f.flush()sys.stdout.write('[Progress]: %0.2f%%' % float(size/content_size*100) + '\r')sys.stdout.flush()else:print response.status_codedef run(self):url = 'https://www.amemv.com/aweme/v1/aweme/post/?user_id=%s&count=32&max_cursor=0&aid=1128&_signature=%s&dytk=%s'%(self.userid,self._signature,self.dytk)url_list = self.handle_url()download_url,title_list = self.get_download_url(url_list)for i in range(len(download_url)):          url = download_url[i]title = title_list[i]self.videodownloader(url,title)if __name__ == '__main__':# 创建对象# 传入三个参数,user_id,_signature,dytkdouyin_spider = douyin_spider('95870186531','RFE1JhAbHxD7J8TA9HCumURRNT','539f2c59bb57577983b3818b7a7f32ef')douyin_spider.run()print '******DouYin_spider@Awesome_Tang、******'

问题

  • 开始说了,目前还存在一个问题,我们看接口地址可以发现,目前需要5个参数分别是:
    user_id, max_cursor,count,_signature, dytk
    前面三个都没问题,而且我看有的博主5/6月份都文章都还只需要前三个参数,_signature, dytk是两个加密之后的参数,不知道咋加密的,而且selenium似乎也没有获取后台请求地址的方法,返回的视频地址也没有在页面进行渲染,所以现在还需要点击分享链接之后手动填入_signature, dytk两个值,有点冒傻气~

skr~skr~~

Python爬一下抖音上小姐姐的视频~相关推荐

  1. 骚操作!用Python自动下载抖音美丽小姐姐(有对象的同学小心尝试!)

    阅读文本大概需要 15 分钟. 1 目 标 场 景 相信大家平时刷抖音短视频的时候,看到颜值高的小姐姐,都有随手点赞关注的习惯. 如果一条条去刷确实很耗时间,如果 Python 能帮忙筛选出颜值高的小 ...

  2. Python爬虫:运用多线程、IP代理模块爬取百度图片上小姐姐的图片

    Python爬虫:运用多线程.IP代理模块爬取百度图片上小姐姐的图片 1.爬取输入类型的图片数量(用于给用户提示) 使用过百度图片的读者会发现,在搜索栏上输入关键词之后,会显示出搜索的结果,小编想大多 ...

  3. python爬取抖音用户数据_使用python爬取抖音视频列表信息

    如果看到特别感兴趣的抖音vlogger的视频,想全部dump下来,如何操作呢?下面介绍介绍如何使用python导出特定用户所有视频信息 抓包分析 Chrome Deveploer Tools Chro ...

  4. Python爬取不羞涩网小姐姐图片——BeautifulSoup应用

    引言 今年提倡原地过年,相信很多朋友都没有回家过年,像我就被迫留在深圳过年了,无聊之余只能去看看电影爬爬山.今天给大家带来一个打发无聊时光的案例,用Python爬取不羞涩网小姐姐图片,并保存到本地,老 ...

  5. 用Python爬取抖音短视频实战,如此简单

    前言 抖音,是一款可以拍短视频的音乐创意短视频社交软件,该软件于2016年9月上线,是一个专注年轻人的15秒音乐短视频社区.用户可以通过这款软件选择歌曲,拍摄15秒的音乐短视频,形成自己的作品.此AP ...

  6. 抖音python广告_抖音上好看的小姐姐,Python给你都下载了

    image 阅读文本大概需要 15 分钟. 目 标 场 景 相信大家平时刷抖音短视频的时候,看到颜值高的小姐姐,都有随手点赞关注的习惯. 如果一条条去刷确实很耗时间,如果 Python 能帮忙筛选出颜 ...

  7. 使用python自动寻找抖音上漂亮的小姐姐,再也不愁没有小姐姐看

    前一段时间在知乎上看到了一个关于python的话题,看到这个有意思的小程序,于是自己也来写一个,先看看效果. 首先我们先做准备工作: 到百度AI开放平台申请一个人脸识别API. adb调试工具. py ...

  8. Python网络爬虫实战:利用 Python ADB 人脸识别实现自动给抖音漂亮小姐姐视频点赞

    这只爬虫做了些什么事儿呢? 通过 ADB 控制你的手机,帮你自动刷抖音 调用百度人脸识别的接口,给视频画面中出现的小姐姐打分 自动给颜值 70 以上的小姐姐的视频点赞 有趣的是,根据抖音的推荐算法,连 ...

  9. Python爬取抖音高颜值小视频

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:有趣的Python PS:如有需要Python学习资料的小伙伴可以加点 ...

最新文章

  1. python的翻译-Python编写简单的谷歌翻译软件
  2. SAP Commerce Cloud 产品主数据读取的单步调试
  3. C++实现utf8和gbk编码字符串互相转换
  4. 基于JFinal框架开发的企业办公系统-JFinalOA v1.1源码
  5. CV卷得厉害,研究机器学习还能做什么?
  6. 实战系列-IDEA中Spring MVC实现接口功能
  7. 解决:虚拟机能ping通主机,主机ping不通虚拟机
  8. pacman安装ubuntu_最受欢迎的Linux发行版, Manjaro Linux虚拟机安装折腾全记录
  9. jquery multiSelect 多选下拉框
  10. Ext JS isField为空或不是对象问题的解决
  11. 1分钟实现Autodesk Vault登录对话框
  12. react怎么引入jquery_在react里面使用jquery插件
  13. mysql安装教程【安装版】
  14. 基于QT和DCMTK的Dicom 图像浏览器---收尾
  15. 如何在服务器上运行Recorder.js,录音上传到服务器使用jwagener的recorder.js和recorder.swf...
  16. c语言做相册影集,制作DIY相册影集教程-如何制作影集
  17. 微信小程序github源码大全下载
  18. window7电脑如何调亮度
  19. 微信小程序转换为uni-app项目
  20. Vue3:自定义指令directive

热门文章

  1. 熟人Dubbo 系列1-Dubbo什么
  2. Maven 手动添加第三方依赖包及编译打包和java命令行编译JAVA文件并使用jar命令打包...
  3. Java开发字符串JSON处理
  4. 让Squid 显示本地时间
  5. 使用FileUpload控件上传图片并自动生成缩略图、自动生成带文字和图片的水印图
  6. 巧用CSS的Wave滤镜
  7. ASP.NET虚拟主机的重大安全隐患
  8. 文本的DES加密 MD5散列值 DSA的数字签名
  9. 图像集存储成MNIST数据集格式实现
  10. 设计模式之代理模式(Proxy)摘录