xpath: ejemplo de reptil simple: extrae el fondo de pantalla original de Onmyoji
Directorio de artículos
I. Introducción
Mucha gente ha jugado con Onmyoji, aparte de cualquier otra cosa, las pinturas originales hechas por Onmyoji son bastante detalladas. En mi tiempo libre, puedo rastrearlas con unas simples líneas de código. ¿No es hermoso?
En segundo lugar, las bibliotecas que deben usarse
import requests
from lxml import etree
from fake_useragent import UserAgent
import os
Para aquellos que no usan la biblioteca de instalación, pueden echar un vistazo a este artículo que escribí antes. Hay muchos enlaces a fuentes nacionales para su descarga.
Tres, el proceso de realización
1. Analizar páginas web
Primero abra el sitio web oficial, el portal del sitio web oficial , haga clic en el " fondo de pantalla original " en el " centro audiovisual "
Después de ingresar a la página de fondo de pantalla original , seleccione un fondo de pantalla y verifíquelo.
Descubrí que hay diferentes enlaces para diferentes resoluciones, y la imagen que verifiqué tiene seis resoluciones. ¿Es igual para todas las imágenes?
¡Entonces descubrí que no lo es!
Como se muestra arriba, hay incluso una imagen con solo cuatro resoluciones, y la posición de resolución de cada imagen no es consistente ¿Cómo extraer el enlace de la imagen original?
A: use xpath para extraer nodos basados en contenido de texto
a = lists[i].xpath('./div/div/a[contains(text(), "1920x1080")]')[0]
De esta forma se puede extraer un nodo con una resolución de "1920 x 1080".
P: lists[i]
¿Qué es?
R: Lo sabrá después de leer el código completo.
2. Implementación de código completa
import requests
from lxml import etree
from fake_useragent import UserAgent
import os
path = 'D:/阴阳师'
if not os.path.exists(path):
os.mkdir(path)
# 随机产生请求头
ua = UserAgent(verify_ssl=False, path='fake_useragent.json')
url = 'https://yys.163.com/media/picture.html' # 原画壁纸的页面链接
response = requests.get(url=url).text
html = etree.HTML(response)
lists = html.xpath('/html/body/div[2]/div[3]/div[1]/div[3]/div[2]/div')
num = 1
for i in range(len(lists)):
a = lists[i].xpath('./div/div/a[contains(text(), "1920x1080")]')[0] # 根据文本内容锁定节点a
image_url = a.xpath('./@href')[0] # 获取原画壁纸链接
image_data = requests.get(url=image_url).content
image_name = '{}.jpg'.format(num) # 给每张图片命名
save_path = path + '/' + image_name # 图片的保存地址
with open(save_path, 'wb') as f:
f.write(image_data)
print(image_name, '=======================>下载成功!!!')
f.close()
num += 1
Los resultados de la operación son los siguientes:
Cuarto, video compuesto
Al sintetizar el video, poco a poco se puede apreciar la pintura original que se arrastró hacia abajo, lo cual es muy cómodo.
el código se muestra a continuación:
import cv2
import os
# 输出视频的保存路径
video_dir = 'D:/yinyangshi/result.mp4'
# 帧率
fps = 0.2
# 图片尺寸
img_size = (1920, 1080)
fourcc = cv2.VideoWriter_fourcc('M', 'P', '4', 'V') # opencv3.0 mp4会有警告但可以播放
videoWriter = cv2.VideoWriter(video_dir, fourcc, fps, img_size)
img_files = os.listdir('D:/yinyangshi/')
for i in range(1, 397):
img_path = 'D:/yinyangshi/tupian/' + '{}.jpg'.format(i)
frame = cv2.imread(img_path)
frame = cv2.resize(frame, img_size) # 生成视频 图片尺寸和设定尺寸相同
videoWriter.write(frame) # 写进视频里
print(f'======== 按照视频顺序第{i}张图片合进视频 ========')
videoWriter.release() # 释放资源
Nota: Al componer un video, la ruta de guardado de la imagen y la ruta de generación del video no pueden contener chino. ! !
Enlace Bip Bip : https://www.bilibili.com/video/BV1Kp4y1W7yB
Colección de pinturas originales de Onmyoji