14 líneas de código Python para rastrear fácilmente videos de sitios web

Prefacio

El texto y las imágenes de este artículo son de Internet y son solo para fines de aprendizaje y comunicación. No tienen ningún uso comercial. Los derechos de autor pertenecen al autor original. Si tiene alguna pregunta, comuníquese con nosotros para su procesamiento.

Autor: comunidad informática IvanFX revival

PD: Si necesita materiales de aprendizaje de Python, puede hacer clic en el enlace de abajo para obtenerlo usted mismo.

Materiales de aprendizaje gratuitos de Python y respuestas de comunicación grupal Haga clic para unirse


Pasos básicos y preparativos

Inserte la descripción de la imagen aquí
Entorno de depuración:

pycharm + python3

Necesita biblioteca:

  • urllib.
  • solicitud
  • re

(http.cookiejar es una biblioteca que será utilizada por los rastreadores posteriores. Este proyecto no implica anti-rastreo, por lo que no puede agregarlo)

Si el proceso de importación muestra que no existe dicha biblioteca, puede agregarla haciendo clic en + en el lado derecho de Archivo → Configuración → intérprete de proyecto (si usa anaconda o python, también puede ejecutar este proyecto directamente y agregarlo a través de cmd → instalación de pip)

2. En este artículo, usamos Python para rastrear videos cortos en línea, descargarlos y almacenarlos. Los pasos básicos son los siguientes (puede escribir notas para ordenar ideas):

(1) Analice la URL de la página y las características de la URL del archivo de video
(2) Obtenga el código fuente HTML de la página web y resuelva el mecanismo anti-escalada
(3) Almacenamiento de video de descarga por lotes

Analizar la URL de la página y las características de la URL del archivo

Inserte la descripción de la imagen aquí
1. Analiza la URL de la página web.

A través de la URL del sitio web: http://www.budejie.com/video/1, podemos encontrar el último valor de la URL de conocimiento para diferentes números de página, y este valor representa el número de páginas, por lo que solo es necesario cambiarlo. a una URL fija + variable Obtenga la URL del sitio web del sitio en lotes

2. Analiza la URL del nombre del archivo

Mediante el análisis del nombre del archivo mp4 en la página web, se encuentra que la URL del archivo se muestra en texto plano, por lo que se puede obtener haciendo coincidir mediante la regularidad de re.

Obtenga URL en lotes y extraiga URL de video de ellas

import urllib.request
import re
for  page in range (1,20):
    req = urllib.request.Request("http://www.budejie.com/video/%s" % page)
    html = urllib.request.urlopen(req).read()
    html = html.decode('UTF-8')
    print(html)

1. URL web de rastreo por lotes

Aquí nuestra variable de página representa la codificación de la página, desde aquí rastreamos temporalmente las primeras 20 páginas.

(1) req obtiene comentarios de la página web
(2) html obtiene el metacódigo de la página web a través de una función
(3) restaura la visualización del chino codificando el código fuente UTF-8.

Pero a través de la ejecución del código anterior, se encuentra que se muestra el error http Error 403 porque no se puede obtener el mecanismo anti-rastreo de la página web.
Inserte la descripción de la imagen aquí
2. Agregue archivos de encabezado a través de la página

Visitamos la página a través de Google Chrome, presionamos F12 y cambiamos a Red, actualizamos la interfaz para observar el proceso de acceso, puede seleccionar un archivo de encabezado del archivo de proceso y agregarlo al código, (baisibudejie.js seleccionado aquí) modificar el código de la siguiente manera, puede rastrear la interfaz normalmente.

for  page in range (1,20):
    req = urllib.request.Request("http://www.budejie.com/video/%s" % page)
    req.add_header("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36")
    html = urllib.request.urlopen(req).read()
    html = html.decode('UTF-8')
    print(html)

Descarga videos en lotes y crea almacenamiento de nombres de archivos

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
1. Establecer un ciclo de denominación de lotes

Una vez establecida la estructura del bucle, el nombre del archivo debe reservarse para la descarga. El significado de i.split ("/") [- 1] es dividir i, con '/' como separador y conservar el último párrafo , que es el nombre del archivo MP4.

2. Descarga por lotes

Todavía es necesario agregar una oración de salida mostrada para indicar el proceso, que también está en línea con la interactividad de un programa, es decir, cuando el video se descarga en la pantalla, se muestra el progreso y finalmente se descarga a una carpeta mp4

for i in re.findall(reg, html):
    filename = i.split("/")[-1]  # 以‘/ ’为分割f符,保留最后一段,即MP4的文件名
    print('正在下载%s视频' % filename)
    urllib.request.urlretrieve(i, "mp4/%s" % filename)

1. Establecer un programa completo

Como programador calificado, debe ordenar el programa y agregar notas para una fácil comprensión y posterior modificación

import urllib.request
import re
def getVideo(page):
        req = urllib.request.Request("http://www.budejie.com/video/%s" %page)
        req.add_header("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36")
        html = urllib.request.urlopen(req).read()
        html = html.decode('UTF-8')
        reg = r'data-mp4="(.*?)"'
        for i in re.findall(reg,html):
            filename = i.split("/")[-1]#以‘/ ’为分割f符,保留最后一段,即MP4的文件名
            print ('正在下载%s视频' %filename)
            urllib.request.urlretrieve(i,"mp4/%s"%filename)
for  i in range (1,20):
    getVideo(i)

Supongo que te gusta

Origin blog.csdn.net/pythonxuexi123/article/details/112787420
Recomendado
Clasificación