Python implémente la connexion automatique + l'obtention de données

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

  1. Envoyer une requête, simuler le navigateur envoyant une requête à l'adresse URL
  2. Obtenir des données, obtenir les données de réponse renvoyées par le serveur
  3. Analyser les données et extraire le contenu des données dont nous avons besoin
  4. 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]

Affichage des résultats finaux d'exécution du code

Je suppose que tu aimes

Origine blog.csdn.net/m0_48405781/article/details/132517613
conseillé
Classement