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.
Pasos básicos y preparativos
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
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.
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
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)