程序笔记   发布时间:2022-07-12  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了自从学会Python爬虫后,爬视频我只爬小姐姐!教你批量下载某短视频网站视频!大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

你问我爬虫最大的乐趣是什么?当然是爬小姐姐了~

自从学会Python爬虫后,爬视频我只爬小姐姐!教你批量下载某短视频网站视频!

砖家说,看美女可以提高寿命,那为了长寿不得天天看。再说了,我看美女只是为了心情愉悦,心情好才能做好事情嘛~

自从学会Python爬虫后,爬视频我只爬小姐姐!教你批量下载某短视频网站视频!

当然我们都是正经人,都看正经的,别看这种,看多了营养跟不上~

自从学会Python爬虫后,爬视频我只爬小姐姐!教你批量下载某短视频网站视频!

是吧,这谁顶得住啊

算了算了 ,走远了,关注正题。说说今天用的环境和 模块啥的

自从学会Python爬虫后,爬视频我只爬小姐姐!教你批量下载某短视频网站视频!

开发环境

  • Python版本:Python 3.6 / 3.8
  • 代码编辑器:pycharm

模块

知识点

  1. requests 的简单使用
  2. 正则表达式的简单使用

大概思路

一、数据来源分析(比较重要, 只有当你找到数据来源的时候, 你才能通过代码去实现)1、确定要爬取的内容 (梨视频)2、利用开发者工具(F12 或者 鼠标右键点击检查 选择 network)进行抓包分析 (学爬虫, 写爬虫程序) 开发者工具 要会使用当我们要爬取多个视频内容 数据内容 (要知道一个数据从哪里来的)I、找到一个视频播放的url地址II、找这个播放地址的来源 >>>> videoInfo真实的播放地址https://video.pearvideo.com/mp4/adshort/20210823/cont-1739485-15752387_adpkg-ad_hd.mp4假的播放地址https://video.pearvideo.com/mp4/adshort/20210823/1629873733405-15752387_adpkg-ad_hd.mp4III、获取每一个视频的 ID 就可以获取所有视频的播放地址

二、代码实现步骤

  1. 发送请求 对于排行榜的url 发送请求
  2. 获取数据 获取网页源代码 (获取响应体的文本数据 response.text)
  3. 解析数据 提取想要的 视频ID 以及 视频标题
  4. 发送请求 需要把视频ID传入 相应的数据包里面
  5. 获取数据 获取json字典数据
  6. 解析数据 提取 假的播放地址
  7. 构建真实url地址
  8. 数据保存
  9. 进行多页/多个视频内容 爬取

自从学会Python爬虫后,爬视频我只爬小姐姐!教你批量下载某短视频网站视频!

要用到的模块统统安排上

import requests  # 数据请求 第三方模块 pip install requests
import re  # 正则表达式模块
import pprint  # 格式化输出模块
import time  # 时间模块
import os  # 文件操作的模块

 

创建一个文件夹存放下载的视频

filename = 'video\'
if not os.path.exists(fileName):
    os.mkdir(fileName)

 

特殊字符全部给它替换掉

def change_title(titlE):
    mode = re.compile(r'[\/*"?<>|]')
    new_title = re.sub(mode, '_', titlE)
    return new_title

 

客户端(浏览器)对于服务器发送请求, 服务器接收到请求之后, 会给客户端返回数据 (通过前端的页面渲染)通过 python代码 对于服务器发送请求, 被反爬, 没有给你返回你想要的数据内容需要把Python代码进行伪装 : 请求头 headers

for page in range(10, 101, 10):
    url = f'https://www.pearvideo.com/popular_loading.jsp?reqType=1&categoryId=&start={pagE}&sort=4&mrd=0.985271587548759'

    headers = {
        'User-Agent': '@H_156_140@mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
    }
    response = requests.get(url=url, headers=headers)
    print(response.status_code)

 

返回的是响应体对象 200 状态码, 表示请求成功。获取响应体的文本属性response 返回的数据 和 elements 并不是一定是一样的print(response.text)解析数据 , re正则表达式, css选择器, xpath [哪一个最适合就那种].*? 匹配任意字符, d+ 匹配多个数字,视频ID都是数字正则表达式,匹配出来的内容,返回的是列表

video_ids = re.findall('<a href="video_(d+)" class="popularembd actplay">', response.text)
    titles = re.findall('<h2 class="popularem-title">(.*?)</h2>', response.text)

 

我们都知道 如果要提取列表中每一个元素 是需要遍历 如果我们同时提取两个列表呢?.zip 压缩包文件 zip(video_ids, titles) 返回是可迭代对象,可以遍历, for循环可以提取出来。

 for video_id, title in zip(video_ids, titles):
        # video_id = i[0]
        # title = I[1]
        # print(video_id)
        # print(titlE)
        # 字符串格式化方法 '{video_iD}'.format(video_id)
        new_title = change_title(titlE)
        link_url = f'https://www.pearvideo.com/videoStatus.jsp?contid={video_iD}&mrd=0.8988491099054703'
        print(link_url)

 

Referer : 告诉服务器, 我们请求的url地址 是从哪里跳转过来的

headers_1 = {
   'Referer': f'https://www.pearvideo.com/video_{video_iD}',
   'User-Agent': '@H_156_140@mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
}
response_1 = requests.get(url=link_url, headers=headers_1)

 

print(response_1.json())pprint.pprint(response_1.json())对于json字典数据 可以直接根据键值对取值 根据冒号左边的内容 提取冒号右边的内容

src_url = response_1.json()['videoInfo']['videos']['srcUrl']
now_time = response_1.json()['systemTime']

 

replace 字符串替换的意思 就是 now_time 替换成 ‘cont-1739485’

video_url = src_url.replace(now_time, f'cont-{video_iD}')
print(video_url)

 

now_time = int(time.time() * 1000)print(now_timE)print(src_url)获取当前时间戳 直接替换掉真实的播放地址https://video.pearvideo.com/mp4/adshort/20210823/cont-1739485-15752387_adpkg-ad_hd.mp4假的播放地址https://video.pearvideo.com/mp4/adshort/20210823/1629873733405-15752387_adpkg-ad_hd.mp4String_1 = ‘/’.join(src_url.split(’/’)[:-1])String_2 = ‘-’.join(src_url.split(’-’)[1:])video_url = String_1 + ‘/cont-’ + video_id + ‘-’ + String_2print(video_url)

video_content = requests.get(url=video_url).content
        with open(filename + new_title + '.mp4', mode='wb') as f:
            f.write(video_content)
            print(titlE)

 

OK ,我们看看爬取结果

@H_801_446@

自从学会Python爬虫后,爬视频我只爬小姐姐!教你批量下载某短视频网站视频!

如果文章看不懂的话,也有详细的视频教程,都可以点我领取 ,包括完整代码。很多小伙伴因为没有好的学习资料或者遇到问题不能及时得到解决,导致自己学不下去,这里小编给大家准备了大量学习资料,都可以点上面的(蓝色点我领取)Python 环境、pycharm编辑器/永久激活/翻译插件python 零基础视频教程Python 界面开发实战教程Python 爬虫实战教程Python 数据分析实战教程python 游戏开发实战教程Python 电子书100本Python 学习路线规划本节视频源码、课件、福利文件都可以加群免费领取Python 相关问题可解答Python 相关外包需求可发布Python 相关招聘需求可发布

自从学会Python爬虫后,爬视频我只爬小姐姐!教你批量下载某短视频网站视频!

大佬总结

以上是大佬教程为你收集整理的自从学会Python爬虫后,爬视频我只爬小姐姐!教你批量下载某短视频网站视频!全部内容,希望文章能够帮你解决自从学会Python爬虫后,爬视频我只爬小姐姐!教你批量下载某短视频网站视频!所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。