大佬教程收集整理的这篇文章主要介绍了自从学会Python爬虫后,爬视频我只爬小姐姐!教你批量下载某短视频网站视频!,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
你问我爬虫最大的乐趣是什么?当然是爬小姐姐了~
算了算了 ,走远了,关注正题。说说今天用的环境和 模块啥的
模块
知识点
一、数据来源分析(比较重要, 只有当你找到数据来源的时候, 你才能通过代码去实现)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 就可以获取所有视频的播放地址
二、代码实现步骤
import requests # 数据请求 第三方模块 pip install requests import re # 正则表达式模块 import pprint # 格式化输出模块 import time # 时间模块 import os # 文件操作的模块
创建一个文件夹存放下载的视频
特殊字符全部给它替换掉
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’
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爬虫后,爬视频我只爬小姐姐!教你批量下载某短视频网站视频!所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。