Python crawler: Donnez - moi un lien pour télécharger des vidéos rapides

Il Persévérance Li 2021-10-25 21:29:19
python crawler donnez moi lien

Préface

Dis quelque chose.,Civilisation rampante,Depuis que j'ai commencé(1.Le Code du programme dans cet article est pour l'étude seulement,.Ne pas utiliser dans des activités commerciales,Une fois découvert par le personnel concerné,Cette petite partie n'est pas responsable!2.Veuillez exécuter ce code de programme pendant que le serveur est inactif,Pour ne pas surcharger le serveur.)

1. Principe de réalisation

Les vidéos dont il est question ici sont toutes de longues vidéos sur les clippers!Lien vers:Clipper longue vidéo
On clique sur l'une des vidéos pour entrer,Appuyez sur le clavier de l'ordinateurF12Clé en mode développeur,En mode développeur, appuyez surctrl+F,Entrée:<video,Vous trouverez ci - dessous un lien de téléchargement pour cette vidéo:


Nous utilisons directementseleniumCe module, L'analyse de cette page est simple pour obtenir le lien de téléchargement de cette vidéo .
Mais ce n'est pas si simple ! Le fast - hand a fait du bon travail dans ce domaine , Pour empêcher les robots , Le clipper a fait une fenêtre coulissante ,Comme suit:
Insérer la description de l'image ici
Les codes sont les suivants::

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)

Bien que nous puissions ajouter un while L'implémentation de la boucle trouve le lien de téléchargement pour cette vidéo !
Insérer la description de l'image ici
Mais ça n'a pas l'air compliqué !
J'y ai réfléchi, Le lien de téléchargement de cette vidéo peut être utilisé ajax Demandé en coulisses ,Ne dis rien., C'est vrai .

Vérifiez cette demande ,La découverte estpostDe, Les paramètres de demande sont les suivants: :

Après comparaison de plusieurs vidéos ,Seulementvariables Les champs suivants sont différents , Et j'ai trouvé ce qui suit :

Bien sûr., Il y a des liens vidéo area, Le paramètre de requête correspondant webPageAreaPas du tout.. Nous pouvons obtenir les deux valeurs de paramètres ci - dessus en utilisant des expressions régulières à , Mais lorsqu'une demande est faite avec un code , Trouvé bien que le Code d'état de la demande soit 200, Mais les données demandées n'ont pas le lien de téléchargement vidéo que nous voulions .
Veuillez ajouter une description de l'image
cookie Les informations sur les champs sont les suivantes :

Après avoir comparé plusieurs vidéos ,C'estcookie Les champs peuvent être fixes (Sauf quedid La valeur de ce champ est générée au hasard 【 La fixation directe générée au hasard est suffisante 】, Les autres sont fixes ).

2. Code du programme

Les codes sont les suivants::

import requests
from crawlers.userAgent import useragent
import json
import re
videoUrl=input(" Veuillez saisir un lien vers la vidéo :")
# 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(), # Accès au navigateur analogique
"content-type": "application/json", # Le type de paramètre demandé est jsonDonnées
"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"}) # DemandedataDonnées,jsonType
rsp=requests.post(url=url, headers=headers, data=data)
print('Le Code d'état de la réponse est:',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,'') # Renommer le fichier
print('Titre de la vidéo:',videoName)
downloadUrl=info['photoUrl']
print(' Le lien de téléchargement de la vidéo est :',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 Persévérance Li]所创,转载请带上原文链接,感谢
https://pythonmana.com/2021/10/20211025212546573g.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