爬虫-抖音无水印视频下载

直接撸代码,复制即用

import re
import requests

class Douyin:
    def __init__(self,url):
        """
        初始化
        :param url: 用手机分享的视频链接
        """
        self.headers = {"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1"}
        self.url = url

    # 获取拼接视频播放地址的参数,获取网页源代码中的参数
    def get_url_data(self):
        res = requests.get(url=self.url, headers=self.headers).text
        try:
            parent_rid = re.findall('parent_rid: "(.*?)"', res)[0]
            itemId = re.findall('itemId: "(.*?)"', res)[0]
            uid = re.findall('uid: "(.*?)"', res)[0]
            dytk = re.findall('dytk: "(.*?)"', res)[0]
            authorName = re.findall('authorName: "(.*?)"', res)[0].encode('utf-8').decode(
                'unicode_escape')  # 原为unicode编码 需要解码
            data = {
                "parent_rid": parent_rid,
                "itemId": itemId,
                "uid": uid,
                "dytk": dytk,
                "code": 0,         # 这里定义一个状态码 0:成功   1:失败
                "authorName": authorName
            }
            return data
        except Exception as e:
            data = {"code": 1}
            return data

    # 获取手机播放地址(只能把浏览器切换成手机模式播放视频)
    def get_phone_video_url(self,data):
        video_url = "https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids={}&dytk={}".format(data["itemId"],data["dytk"])
        rep = requests.get(url=video_url, headers=self.headers).json()
        try:
            for item in rep["item_list"]:
                desc = item["desc"]  # 标题
                duration = item["duration"]  # 时长
                url = item["video"]["play_addr"]["url_list"][0]  # 一共两个视频链接 都可以播放  选择一个就行
                comment_count = item["statistics"]["comment_count"]  # 评论数
                digg_count = item["statistics"]["digg_count"]    # 点赞数
                data["desc"] = desc
                data["duration/(毫秒)"] = duration
                data["duration/(分钟)"] = round(duration / 60000, 3)  # 保留小数点后两位
                data["appurl"] = url
                data["code"] = 0
                data["comment_count"] = comment_count
                data["digg_count"] = digg_count
            return data
        except Exception as e:
            data["code"] = 1
            return data

    # 获取web播放地址
    def get_video_web_url(self,data):
        if data["code"] == 0:
            res = requests.get(data["appurl"], headers=self.headers, allow_redirects=False).headers
            data["url"] = res["location"]
            data.pop("appurl")
            return data
        else:
            return {}

    # 程序入口
    def main(self):
        url_data = self.get_url_data()
        phone_video_url = self.get_phone_video_url(url_data)
        data = self.get_video_web_url(phone_video_url)
        return data

if __name__ == '__main__':
    d = Douyin("https://v.douyin.com/cLf9Kn/")  # 复制分享的视频链接
    w = d.main()
    print(w)
{'parent_rid': '20200406141604010194044226966C77', 'itemId': '6777940418903543055', 'uid': '60965882796', 'dytk': 'a81b990970be47f46d3e5037e275c7f6ce5a28e349ab64589492411443b90567', 'code': 0, 'authorName': '房岩小哥', 'desc': '千万不要熬夜了。这种结果你怕不怕', 'duration/(毫秒)': 50133, 'duration/(分钟)': 0.836, 'comment_count': 1709, 'digg_count': 47416, 'url': 'http://v6-dy-z.ixigua.com/c1f5f994a5f3f78a5e17ab39f06ee7a7/5e8ad767/video/tos/cn/tos-cn-ve-15/9a7f50ebae5c4712a536a0fdaed84e7a/?a=1128&br=0&bt=863&cr=0&cs=0&dr=0&ds=6&er=&l=2020040614160501001203309001599158&lr=&qs=0&rc=anQ3N3dmcHE0cjMzPGkzM0ApOmhoODU4PDxnNzpkZDw0OGdmaGJeL15mNjVfLS00LS9zczY0XjReMC1eM19iNF4wLjA6Yw%3D%3D&vl=&vr='}
Python中利用网络爬虫技术下载水印图片,通常会涉及到以下几个步骤: 1. **安装必要的库**: 首先需要安装`requests`库用于发送HTTP请求获取网页内容,以及`beautifulsoup4`库解析HTML结构。 ```bash pip install requests beautifulsoup4 ``` 2. **分析网页结构**: 使用浏览器的开发者工具查看目标图片的URL,因为可能会对直接访问的链接加水印,而通过JavaScript动态加载的图片则可能是无水印的。你需要找到加载图片数据的部分并理解其请求规律。 3. **发送请求获取图片**: 根据分析结果,编写Python代码发送GET请求,获取无水印图片的URL。例如,如果图片在JSON响应中,可以解析出来。 ```python import requests import json def get_image_url(response): # 解析JSON获取图片URL data = json.loads(response.text) image_url = data.get('image_url') # 假设这是一个键名 return image_url response = requests.get('https://example.com/api/image') image_url = get_image_url(response) ``` 4. **下载图片**: 获取到无水印图片URL后,使用`requests`库下载图片,并保存到本地。 ```python from PIL import ImageGrab import os def download_image(url, save_path='images'): response = requests.get(url, stream=True) if response.status_code == 200: with open(os.path.join(save_path, 'image.jpg'), 'wb') as f: for chunk in response.iter_content(chunk_size=1024): f.write(chunk) f.flush() else: print(f"Failed to download image, status code: {response.status_code}") download_image(image_url) ``` 5. **处理可能出现的问题**: - 抓取过程中可能遇到反爬机制,需要设置合适的User-Agent、频率限制,甚至可能需要登录验证。 - 图片URL可能有防盗链措施,可能需要处理cookies或session。 注意:在实际操作中,务必遵守网站的robots.txt协议,尊重版权,并确保你的爬虫活动不会对服务器造成过大的负担。同时,频繁抓取大量数据可能违反平台的服务条款,所以合理使用爬虫是非常重要的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI悦创|编程1v1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值