Préface
Tout le monde doit avoir utilisé Dy, et ils l'utilisent souvent. Utilisons le code aujourd'hui pour obtenir ses données vidéo.
Utilisation environnementale
Python
3.8Pycharm
Utilisation des modules
demande
du sélénium
json
re
1. Analyse des sources de données
1. Clarifier les besoins
et collecter clairement le site internet et le contenu des données
网址: https://www.dy.com/user/MS4wLjABAAAAB0-gppwu15DtJJZmMpgUqakr7Jw_pmr7skR3IW6MwCQ?modal_id=7270865943398518050
Données : lien vidéo/titre de la vidéo
2. Analyse de capture de paquets
Effectuer une analyse de capture de paquets via les outils de développement
I. Ouvrez les outils de développement : F12
II. Actualisez la page Web
III. Recherchez le lien de données
视频链接: https://v26-web.dyvod.com/295eea512e6f187309e6181297ec185e/64e8a7f8/video/tos/cn/tos-cn-ve-15c001-alinc2/o8vKACOD9NSbaA3mnggzfIO5QAgkqHnGr7sAeB/?a=6383&ch=26&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=609&bt=609&cs=2&ds=3&ft=bvTKJbQQqU-mfJ4ZPo0OW_EklpPiXV8zNMVJEdBqSpvPD-I&mime_type=video_mp4&qs=15&rc=NTg8NzpoNGY2aGU0N2k1PEBpajhuNTY6ZmhtbTMzNGkzM0AtMy4xY2E0Xi4xYDNjX15iYSM2bl5scjRvLWdgLS1kLWFzcw%3D%3D&btag=e00010000&dy_q=1692965337&l=20230825200856A1A3326D295C25055965
IV. Grâce à une recherche par mot-clé, recherchez le paquet de données correspondant au lien.
Lien vidéo/titre --> provient du code source de la page Web <Encodage>
数据包: https://www.dy.com/user/MS4wLjABAAAAB0-gppwu15DtJJZmMpgUqakr7Jw_pmr7skR3IW6MwCQ?modal_id=7270865943398518050
2. Étapes de mise en œuvre du code
- Envoyer une requête, simuler le navigateur envoyant une requête à l'adresse URL
- Obtenir des données, obtenir les données de réponse renvoyées par le serveur
- Analyser les données et extraire le contenu des données dont nous avons besoin
- enregistrer des données, enregistrer des données vidéo
Code
envoyer une demande
Navigateur simulé : <Peut être copié directement>
Response.text Récupère les données du texte de la réponse.
Response.json() Récupère les
données JSON de la réponse.
l'URL spécifiée et obtenir le contenu de la réponse
headers = {
# User-Agent 用户代理, 表示浏览器基本身份信息
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36'
}
# 请求链接
url = 'https://www.dy.com/user/MS4wLjABAAAArgJe6h-DzQcvyZ1O71yXSdJFn19Tqq8lFCIffgy5SlhwYlkseK5aM5ETF8KoaGDK?modal_id=7270476649714421046&vid=7269532986553552140'
# 发送请求
response = requests.get(url=url, headers=headers)
Données analytiques
Utilisez des expressions régulières pour rechercher et faire correspondre des modèles spécifiques dans le contenu HTML afin d'extraire les données requises.
Appelez la méthode findall dans le module re
re.findall('data : les données dont vous avez besoin', 'data source : où obtenir les données') --> trouver tout le contenu des données
# 获取响应文本数据 获取网页源代码内容
html_data = response.text
# 提取标题
title = re.findall('video_title" content="(.*?)"/>', html_data)[0]
# 提取视频信息 <经过了编码>
video_info = re.findall('<script id="RENDER_DATA" type="application/json">(.*?)</script>', html_data)[0]
# 解码
info = requests.utils.unquote(video_info)
# 把完整json数据格式字符串, 转成字典数据类型
json_data = json.loads(info)
# 根据冒号左边的内容[键], 提取冒号右边的内容[值]
video_url = 'https:' + json_data['app']['videoDetail']['video']['bitRateList'][0]['playAddr'][0]['src']
enregistrer des données
Envoyer une demande de lien vidéo, obtenir du contenu de données binaires, enregistrer dans un dossier local
video_content = requests.get(url=video_url, headers=headers).content
with open('video\\' + title + '.mp4', mode='wb') as f:
f.write(video_content)
print(title)
print(video_url)
Connexion simulée
Importer les modules requis
# 自动化测试模块
from selenium import webdriver
# demo
from chaojiying import Chaojiying_Client
from password import account, password
# 动作链
from selenium.webdriver.common.action_chains import ActionChains
Connectez-vous automatiquement au navigateur
# 打开浏览器, 访问网站
driver = webdriver.Chrome()
driver.get('https://www.dy.com/user/MS4wLjABAAAAB0-gppwu15DtJJZmMpgUqakr7Jw_pmr7skR3IW6MwCQ')
# 延时
driver.implicitly_wait(10)
time.sleep(2)
# 获取验证码图片
img_label = driver.find_element_by_css_selector('.captcha_verify_container')
# 截图 保存验证码图片
img_label.screenshot('yzm.png')
transfert
# 调用 --> 帮助我们识别文字坐标
chaojiying = Chaojiying_Client(账号, 密码, '96001')
# 读取图片
im = open('yzm.png', 'rb').read()
result = chaojiying.PostPic(im, '9004')['pic_str']
for res in result.split('|'):
x = res.split(',')[0]
y = res.split(',')[-1]
ActionChains(driver).move_to_element_with_offset(img_label, int(x), int(y)).click().perform()
driver.find_element_by_css_selector('.captcha_verify_action div:last-of-type').click()
time.sleep(2)driver.implicitly_wait(10)
lis = driver.find_elements_by_class_name('Eie04v01')
for li in lis:
video_id = li.find_element_by_css_selector('a').get_attribute('href').split('/')[-1]