python 爬取抖音视频

磊落不羁 by:磊落不羁 分类:爬虫 时间:2年前 阅读:134 评论:0

抖音爬取最困难的是抖音视频地址的提取 ,提取到视频地址之后 即可进行保存下载     

抖音的地址存于script标签间 是编码后的  所以取到地址要进行解码   

本案例中使用的解码方式 是request  解码   具体其他解码方式 


url其他包解码

from urllib import parse

#数据对象
data = {
    "a":"1",
    "b":"3",
    "x":"张三",
    "y":"李四"
}

#进行url_encode编码,编码结果为查询字符串形式,即进行url编码,然后用a=1&b=2形式拼接键值对
text = parse.urlencode(data)
print(text)

#进行url解码,但是不会将拼接形式转换为字典形式
text1 = parse.unquote(text)
print(text1)

#进行url编码,但是这步会将&与=一起转码
text2 = parse.quote(text1)
print(text2)


a = "我是大侦探"
#url编码
b = parse.quote(a)
print(b)

#url解码
c = parse.unquote(b)
print(c)

#执行结果为
a=1&b=3&x=%E5%BC%A0%E4%B8%89&y=%E6%9D%8E%E5%9B%9B
a=1&b=3&x=张三&y=李四
a%3D1%26b%3D3%26x%3D%E5%BC%A0%E4%B8%89%26y%3D%E6%9D%8E%E5%9B%9B
%E6%88%91%E6%98%AF%E5%A4%A7%E4%BE%A6%E6%8E%A2
我是大侦探



案例代码如下:

try:
    url = li.find_element_by_css_selector('a').get_attribute('href')
    """
    1. 发送请求, 模拟浏览器对于url地址发送请求
        需要注意什么细节:
            <Response [200]> 表示是请求成功, 但是不代表你得到数据
    """
    # 确定url地址
    # url = 'https://www.douyin.com/video/7064550745437146383'
    # 模拟浏览器 伪装python代码 设置请求头参数
    headers = {
         # 无论是否有登陆 都有 cookie
        'cookie': 'douyin.com; ttwid=1%7CHj5s1edW817SdFa5U5hnifjpPs-xPs4Lv7vC7DQNm60%7C1652797030%7C21e300be59bef00949a7d8f790beeeb4db77670205394cc7cce9dcd0229b5e95; odin_tt=fded742fd6268e282962a1c63dd4f62e37e3bd8950387213e5a8bf5d86daef284ad8b9c31fb69e43d70253eca40fdb3fd0dad5ea27c7288dc9f4910ffcd7cce1; s_v_web_id=verify_l5rpgfoe_2FbyEP85_x7NT_4lnS_8mmC_nBHk2mpOAmBm; passport_csrf_token=512069ecb5db0a00d52dbef10af4dc80; passport_csrf_token_default=512069ecb5db0a00d52dbef10af4dc80; strategyABtestKey=1659508208.59; download_guide=%221%2F20220803%22; THEME_STAY_TIME=%22299791%22; IS_HIDE_THEME_CHANGE=%221%22; __ac_nonce=062ea61cf0015449b429c; __ac_signature=_02B4Z6wo00f01qBh60AAAIDCIGMRAcbkcOKgQe.AAMr-cutAXyUweCACuMTMehP6MqIdwv2UEAokF6bgwnKJHr-hyQGeTR3ihhKs3ZnrQMVRw201.2SFchUf9IYC773W0pl8PgdRzDjOMuyxe4; douyin.com; home_can_add_dy_2_desktop=%221%22; tt_scid=JJ6iYRr.ZdTE5Je0lI2iTvxgISufJnQJCWA52nAk039mUVI2M0tFOAEhXUTbS5dR4460; msToken=YBz-BW7m8hhFhPyQMrwofvkqhXmfcY5CZz5CWtGWgAklgELhEww4OWk067p3bI2IksUw7vbX7uKG2jb1niFtISXpdv-vue9YY6lBHXOIkPQdQg9oJVeQs2s=; msToken=B66A2vCUlfhY3aX_Vf9_z5Lk-SME5-nNGQXkKPOAJM42SYQsWlg9qUtM2Hr6xw4rZYpkGhO7yzt92WXL4nJ3FU2EbimiozujrVjWw-6IWDFLWVfM9np7oSw=',
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
    }
    # 发送请求  左边url是get请求方法里面形式参数 右边url是我们自定义变量, 传入进去参数
    response = requests.get(url=url, headers=headers)
    # 打印响应对象 <Response [200]>
    print(response)
    # 2. 获取数据 print(response.text)
    """
    3. 解析数据 ---> 根据返回数据类型<内容> 以及 你想要数据内容 选择最方便合适解析方法
        re正则表示式 直接可以对于字符串数据进行提取
    
    除非说我们用re提取说出来之后, 是json数据格式, 然后通过数据类型转换之后, 再用字典取值
    """
    # 提取标题
    title = re.findall('<title data-react-helmet="true">(.*?)</title>', response.text)[0]
    #
    html_data = re.findall('<script id="RENDER_DATA" type="application/json">(.*?)</script', response.text)[0]
    # 解码  ---> requests简单使用 方法 系统课程都教授了
    # requests.utils.unquote 解码  requests.utils.quote 编码
    html_data = requests.utils.unquote(html_data)
    # 转换数据类型
    json_data = json.loads(html_data)
    # 字典取值 字典取值, 根据冒号左边的内容, 提取冒号右边的内容
    video_url = 'https:' + json_data['75']['aweme']['detail']['video']['bitRateList'][0]['playAddr'][0]['src']
    print(title)
    print(video_url)
    # 保存数据
    video_content = requests.get(url=video_url, headers=headers).content
    with open('video\\' + title + '.mp4', mode='wb') as f:
        f.write(video_content)
except Exception as e:
    print(e)


非特殊说明,本文版权归原作者所有,转载请注明出处

本文地址:http://php.liulei.com.cn/?type=acticle&id=43

评论列表

发表评论

  • 昵称(必填)
  • 邮箱
  • 网址

TOP