秋天树下的太阳 2023-01-04 10:37 采纳率: 62.5%
浏览 50
已结题

pycharm爬虫下载视频python

用pycharm运行一个程序是没有报错,但没有预想的那样的效果,代码如下:

# !/usr/bin/python3
# -*- coding: utf-8 -*-
import re
from lxml import etree
import requests
import time
from tqdm import tqdm
import os
from urllib.request import urlopen


def download_from_url(url, dst):
    """
    @param: url to download file
    @param: dst place to put the file
    :return: bool
    """
    # 获取文件长度
    try:
        file_size = int(urlopen(url).info().get('Content-Length', -1))
    except Exception as e:
        print(e)
        print("错误,访问url: %s 异常" % url)
        return False

    # print("file_size",file_size)
    # 判断本地文件存在时
    if os.path.exists(dst):
        # 获取文件大小
        first_byte = os.path.getsize(dst)
    else:
        # 初始大小为0
        first_byte = 0

    # 判断大小一致,表示本地文件存在
    if first_byte >= file_size:
        print("文件已经存在,无需下载")
        return file_size

    header = {"Range": "bytes=%s-%s" % (first_byte, file_size)}

    pbar = tqdm(
        total=file_size, initial=first_byte,
        unit='B', unit_scale=True, desc=url.split('/')[-1])

    # 访问url进行下载
    req = requests.get(url, headers=header, stream=True)
    try:
        with(open(dst, 'ab')) as f:
            for chunk in req.iter_content(chunk_size=1024):
                if chunk:
                    f.write(chunk)
                    pbar.update(1024)
    except Exception as e:
        print(e)
        return False

    pbar.close()
    return True


def DownloadFile(url, name):
    """
    下载文件
    :param url:
    :param name:
    :return:
    """
    try:
        resp = requests.get(url=url, stream=True)
        content_size = int(resp.headers['Content-Length']) / 1024
        with open(name, "wb") as f:
            print("package total size is:", content_size, 'k,start...')
            for data in tqdm(iterable=resp.iter_content(1024), total=content_size, unit='k', desc=name):
                f.write(data)

        print("%s 下载成功" % url)
        return True
    except Exception as e:
        print(e)
        print("%s 下载失败" % url)
        return False


# 头部
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36'
}

# 访问页面
response = requests.get('https://play-9zh7eclb.pomoho.com/e98a9b83ae9e4cc050f7642a7dda2752/63b2e0b1/4947/49464230_11_1DE6A544C44D5EEF636C722178909A69.mp4', headers=headers)
data = response.text

# 构造了一个XPath解析对象并对HTML文本进行自动修正
html = etree.HTML(data)
# 获取视频播放链接
html_data = html.xpath('//div[@class="r_box"]/ul/li//a/@href')
# print("html_data", html_data, type(html_data))

# 遍历url
for i in html_data:
    url = "https://play-9zh7eclb.pomoho.com%s" % i
    print(url)

    # 访问url
    response_1 = requests.get(url, headers=headers)
    data_1 = response_1.text
    # 正则匹配视频地址
    video = re.findall('type: "video/mp4", src: "(.*?)"', data_1)
    video_1 = video[0]
    print("video_1", video_1)
    x = video_1.split('/')[-1]

    # 本地保存视频文件名
    name = f'{x}.mp4'
    print("name", name)

    # 下载视频
    download_from_url(video_1, name)

    # 这里只演示第一个视频,直接break
    break

预想结果:

img

img

  • 写回答

2条回答 默认 最新

查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月30日
  • 已采纳回答 8月22日
  • 创建了问题 1月4日

悬赏问题

  • ¥15 pyqt怎么把滑块和输入框相互绑定,求解决!
  • ¥20 wpf datagrid单元闪烁效果失灵
  • ¥15 券商软件上市公司信息获取问题
  • ¥100 ensp启动设备蓝屏,代码clock_watchdog_timeout
  • ¥15 Android studio AVD启动不了
  • ¥15 陆空双模式无人机怎么做
  • ¥15 想咨询点问题,与算法转换,负荷预测,数字孪生有关
  • ¥15 C#中的编译平台的区别影响
  • ¥15 软件供应链安全是跟可靠性有关还是跟安全性有关?
  • ¥15 电脑蓝屏logfilessrtsrttrail问题