Python爬虫:给我一个链接,快手视频随便下载

il_持之以恒_li 2021-10-25 21:25:53
Python 爬虫 链接 一个 给我

前言

讲一下,文明爬虫,从我做起(1.文章中的程序代码仅供学习,切莫用于商业活动,一经被相关人员发现,本小编概不负责!2.请在服务器闲时运行本程序代码,以免对服务器造成很大的负担.)

1. 实现原理

小编这里讲的视频都是快手上的长视频哈!链接为:快手长视频
我们随便点击其中的一个视频进入,按电脑键盘的F12键来到开发者模式,在开发者模式下按ctrl+F,输入:<video,可以找到这个视频的下载链接如下:


我们直接运用selenium这个模块,直接对这个页面解析简简单单就可以获取这个视频的下载链接了。
但是没有这么简单的哈!快手在这方面还是做的不错的,为了防止机器人,快手做了一个滑动窗口,如下:
在这里插入图片描述
代码如下:

from selenium import webdriver
driver=webdriver.Chrome()
driver.get(url='https://www.kuaishou.com/video/3xwpkmq75cf2shu?authorId=3x7tp82qssqyteu&tabId=0&area=recommendxxrecommend')
driver.implicitly_wait(5)
downloadUrl=driver.find_element_by_xpath("//video[@class='player-video']").get_attribute("src")
print(downloadUrl)

虽然我们可以通过添加一个while循环实现找到这个视频的下载链接哈!
在这里插入图片描述
但这是不是显得很繁琐呀!
后来想了一下,这个视频的下载链接可能是使用ajax请求从后台获取的,你还别说,还真的是这样的。

查看一下这个请求,发现是post的,请求参数如下:

经过多个视频的比较,发现只有variables下的字段不同,并且发现如下:

当然,有的视频链接他是没有area,相对应它的请求参数webPageArea也没有。我们可以通过使用正则表达式将上述两个参数值获取到,但是用代码发起请求时,发现虽然请求状态码为200,但是请求得到的数据却没有我们想要的视频下载链接。
请添加图片描述
cookie字段信息如下:

经过多个视频比较,这个cookie字段可以是固定的(除了did这个字段的值是随机生成的之外【随机生成的直接用固定即可】,其他都是固定的)。

2. 程序代码

代码如下:

import requests
from crawlers.userAgent import useragent
import json
import re
videoUrl=input("请输入视频的链接:")
# https://www.kuaishou.com/video/3xbszt6yravw739?authorId=3x45xripnn3tq5a&tabId=1&area=recommendxxfilm
photoId=re.findall(r"https://www.kuaishou.com/video/(.*)\?.*",videoUrl)[0]
try:
webPageArea=re.findall(r".*area=(.*)",videoUrl)[0]
except Exception as e:
print(e)
webPageArea=''
useragent = useragent()
url = 'https://www.kuaishou.com/graphql'
print(photoId,webPageArea)
headers = {
"user-agent": useragent.getUserAgent(), # 模拟浏览器访问
"content-type": "application/json", # 请求的参数类型为json数据
"Cookie": "kpf=PC_WEB; kpn=KUAISHOU_VISION; clientid=3; did=web_4a95d5c2e09f889043edeffcb9fdb89d; didv=1635052275840",
}
data =json.dumps({"operationName": "visionVideoDetail",
"variables": {"photoId": "%s"%(photoId), "page": "detail", "webPageArea": "{}".format(webPageArea)},
"query": "query visionVideoDetail($photoId: String, $type: String, $page: String, $webPageArea: String) {\n "
"visionVideoDetail(photoId: $photoId, type: $type, page: $page, webPageArea: $webPageArea) {\n "
"status\n type\n author {\n id\n name\n following\n headerUrl\n "
"__typename\n }\n photo {\n id\n duration\n caption\n likeCount\n "
"realLikeCount\n coverUrl\n photoUrl\n liked\n timestamp\n expTag\n "
"llsid\n viewCount\n videoRatio\n stereoType\n croppedPhotoUrl\n manifest {"
"\n mediaType\n businessType\n version\n adaptationSet {\n id\n "
" duration\n representation {\n id\n defaultSelect\n "
" backupUrl\n codecs\n url\n height\n width\n "
" avgBitrate\n maxBitrate\n m3u8Slice\n qualityType\n "
"qualityLabel\n frameRate\n featureP2sp\n hidden\n "
"disableAdaptive\n __typename\n }\n __typename\n }\n "
"__typename\n }\n __typename\n }\n tags {\n type\n name\n "
"__typename\n }\n commentLimit {\n canAddComment\n __typename\n }\n llsid\n "
"danmakuSwitch\n __typename\n }\n}\n"}) # 请求的data数据,json类型
rsp=requests.post(url=url, headers=headers, data=data)
print('响应的状态码为:',rsp.status_code)
infos=json.loads(rsp.text)
info=infos['data']['visionVideoDetail']['photo']
videoName=info['caption']
for str_i in ['?','、','╲','/','*','“','”','<','>','|']:
videoName=videoName.replace(str_i,'') # 文件重命名
print('视频的标题:',videoName)
downloadUrl=info['photoUrl']
print('视频的下载链接为:',downloadUrl)
headers={'user-agent':useragent.getUserAgent()}
rsp2=requests.get(url=downloadUrl,headers=headers)
with open(file="{}.mp4".format(videoName),mode="wb") as f:
f.write(rsp2.content)
版权声明
本文为[il_持之以恒_li]所创,转载请带上原文链接,感谢
https://www.cnblogs.com/liuze-2/p/15463255.html

  1. python中关于数列删减问题
  2. Python frequently asked questions - PIP install specifies the requirements.txt exported by the poetry, and an error is reported: in -- require hashes mode, all req
  3. Sur le problème de la réduction des séries en python
  4. 关于Python安装的问题(不知道自己下的什么)
  5. What do Python's u, R, B, f mean?
  6. Actual combat! Why is Changjin lake so popular? I use Python to analyze cat eye reviews.
  7. Python用xpath定位正确返回的是返回空值
  8. Python error handling
  9. django_celery_beat的clocked定时任务不触发
  10. Python renvoie une valeur nulle si elle est correctement retournée en utilisant XPath
  11. 关于#python#的问题:sqlalchemy.exc.ProgrammingError: (pymysql.err.ProgrammingError)
  12. python + selenium 能定位出来算你厉害
  13. Python + sélénium peut vous localiser.
  14. Python code reading (Chapter 13): check whether the elements in the list are the same
  15. Python online retail data association rule mining Apriori algorithm data visualization
  16. python习题,要求用for循环和if语句。
  17. 用Python获得女友聊天记录,一招解决疑神疑鬼
  18. Obtenez le chat de votre petite amie en python pour résoudre les problèmes
  19. Les exercices Python nécessitent des boucles pour et des énoncés if.
  20. Python code reading (Chapter 13): check whether the elements in the list are the same
  21. 练手练到阅文集团作家中心了,python crawlspider 二维抓取学习
  22. python阶乘和数题,要求用for循环,if语句
  23. Python 求最大幂次,用while循环
  24. L'entraîneur s'est entraîné au centre d'écriture du Groupe Yuewen, Python crawlspider 2D grapping Learning
  25. 这六个Python程序的代码要怎么写
  26. Python calcule la puissance maximale et utilise la Boucle while
  27. python入门:请问怎么避免用户输入相同内容呢
  28. python用迭代法求平方根要求用while循环
  29. Comment écrire le Code de ces six programmes Python
  30. python用迭代法求平方根要求用while循環
  31. Python a besoin d'une Boucle while pour trouver la racine carrée par itération
  32. Démarrer avec Python: Comment puis - je empêcher les utilisateurs d'entrer le même contenu?
  33. 这么多的内置函数能记住吗?对python的68个内置函数分类总结!
  34. 這麼多的內置函數能記住嗎?對python的68個內置函數分類總結!
  35. Est - ce que tant de fonctions intégrées peuvent être mémorisées? Résumé de la classification des 68 fonctions intégrées de Python!
  36. 这么多的内置函数能记住吗?对python的68个内置函数分类总结!
  37. Est - ce que tant de fonctions intégrées peuvent être mémorisées? Résumé de la classification des 68 fonctions intégrées de Python!
  38. python 假设lst=[3,4,12,[6,9,12,24],[12,18,34]]统计list中包含元素12的个数
  39. python 假設lst=[3,4,12,[6,9,12,24],[12,18,34]]統計list中包含元素12的個數
  40. Python suppose que LST = [3,4,12, [6,9,12,24], [12,18,34]] compte le nombre d'éléments 12 dans la Liste
  41. 你需要知道的 20 个 Python 技巧
  42. 如何在 Python 中搜索和替换文件中的文本?
  43. 只需 15 行代码即可进行人脸检测!(使用Python 和 OpenCV)
  44. Python中选择结构问题求解
  45. La détection faciale ne nécessite que 15 lignes de code! (en utilisant Python et OpenCV)
  46. Comment rechercher et remplacer du texte dans un fichier en python?
  47. 20 conseils Python que vous devez connaître
  48. python计算机视觉项目供Java后端调用
  49. python計算機視覺項目供Java後端調用
  50. Python Computer Vision Project for Java Backend Calls
  51. Résoudre le problème de la structure de sélection en python
  52. 使用Python,OpenCV的Meanshift 和 Camshift 算法來查找和跟踪視頻中的對象
  53. Trouver et suivre des objets dans la vidéo en utilisant Python, les algorithmes meanshift et camshift d'OpenCV
  54. Visualisation python - solutions de dessin 3D pyecharts, matplotlib, openpyxl
  55. Automatically generate API documents from Python source code comments
  56. 下载pandas出错了,怎么解决啊
  57. Une erreur s'est produite lors du téléchargement de pandas.
  58. Python Type Hints 从入门到实践
  59. Python Type Hints 從入門到實踐
  60. Type Python hints from starting to Practice