La biblioteca de solicitudes de Python rastrea "I just like you" de Chen Baiqiang, usa la biblioteca re (expresión regular) para extraer, usa el módulo del sistema os y elimina el símbolo anti-escalada '\'

Hoy, escuché una buena canción llamada "I Just Like You". El hermano Chen Baiqiang cantó, ¡es realmente fuerte como sugiere el nombre! Uno de los cantantes cantoneses que admiro. Entonces, fue demasiado difícil para mí, me tomó 3 horas, lo cual es realmente vergonzoso para mí, un viejo conductor que ha aprendido a gatear durante 1 mes. Sin embargo, esta vez no usé la biblioteca de Selenium para rastrear, si utilizo selenium, se hará rápidamente y no habrá ningún problema. ¡Experimentemos la sensación de aprender juntos! !

Código completo:

#encoding = "utf-8"
#Author:"Mr.Pan_学狂"
#start time:2021/2/22/22:30
#finish time:2021/2/23/00:40
#requests库爬取 陈百强 《偏偏喜欢你》
from selenium import webdriver
from lxml import etree
import re
import requests
from urllib.request import urlretrieve
import time
import random
import os
url = 'https://haokan.baidu.com/v?vid=17139400655098661254&pd=bjh&fr=bjhauthor&type=video'
html = requests.get(url,headers=headers).text
#print(html)
#reg = r'<video class="" autoplay="" tabindex="2" mediatype="video" crossorigin="anonymous" src="(.*?)"</video>'video不存在,原因可能是JS的异步加载,网页是动态的。
reg = '"url":(.*?),"videoBps":352'
url = re.findall(reg,html)[0]
reg2 = '<h1 class="videoinfo-title">(.*?)</h1>'
video_name = re.findall(reg2,html)[0]
print(video_name)
print(url)
reg3 = '"(.*?)"'
url2 = re.findall(reg3,url)[0]#将url的引号处理掉!!因为直接用requests访问会进行引号嵌套出错!!
print(url2)#需要对url2进行处理,因为url2有反斜杠访问会出错!!
ls = []
for i in url2:
    ls.append(i)
#print(ls)
while True:
    if '\\' in ls:
        ls.remove('\\')
    else:
        break
print(ls)
url3 = ''
for l in ls:
    url3 += l
print('url3:',url3)

os.mkdir('E:/Example')
video = requests.get(url3,headers=headers)
with open(r'E:/Example/{}.mp4'.format(video_name),'wb+') as f:
       f.write(video.content)

A continuación, voy a contar la historia. En primer lugar, es a la antigua. Si no dice mucho, si no está de acuerdo, simplemente hágalo. Aparece como una biblioteca que todos los rastreadores necesitar.
Inserte la descripción de la imagen aquí
Vayamos a la URL de este video para verificar los elementos, como se muestra en la siguiente figura:
Inserte la descripción de la imagen aquí
Si usa la biblioteca de selenio para rastrear este video, será muy fácil, porque simplemente puede extraer el xpath directamente. Sin embargo, solo usamos solicitudes y la extracción re (regular) será un gran problema, porque aparecerá la siguiente situación, de acuerdo con la rutina habitual, src es el contenido que necesitamos extraer. Pero aquí esta página web hizo una pequeña broma con nosotros, porque el código fuente de esta etiqueta de video no existe (creo que está cargado por JS, dinámico). Esta extracción solo puede obtener una lista vacía, nada en absoluto. Al hacer esto, creo que la mayoría de los compañeros que recién están comenzando se rendirán directamente, no se desanimen, ¡todavía tenemos esperanza!
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
El resultado solo puede ser una lista vacía, como se muestra a continuación:
Inserte la descripción de la imagen aquí

Sin embargo, pienso detenidamente que si no hay un enlace a este video en esta página, entonces no debe estar vinculado al video, y debe encontrarse en esta página, es decir, el enlace al video se puede encontrar en el código fuente de la página. Entonces, presiono directamente la combinación de teclas Ctrl + F en el editor de pycharm para verificar si la palabra mp4 existe en el código fuente, como se muestra en la figura a continuación:
Inserte la descripción de la imagen aquí
encontraremos cuatro enlaces correspondientes de mp4 más, hice clic y encontré que todos cuatro Es el mismo enlace al video. Entonces, solo necesitamos encontrar una manera de extraer uno de los enlaces. Elegí el enlace cuyo valor de videoBps es 352 para extraer con expresiones regulares, como se muestra en la siguiente figura:
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Ejecutar resultado:
Inserte la descripción de la imagen aquí
jajajajajaja, aquí realmente no puedo evitar sonreír. ¿Está contento de rastrear hasta el enlace? ? Es una cadena inaccesible. . . . Pregunte por el área de sombra S ∈ (-∞, + ∞) en mi corazón en ese momento. Se estima que en este punto, algunos amigos con un poco de experiencia en gatear se rindieron en el acto y comenzaron a llorar directamente. Sin embargo, ¡debemos creer en nosotros mismos y creer en la esperanza!

No hay prisa, ¡nuestra re biblioteca 6 también lo es! ¡Hágalo por usted en minutos, funcionando y de manera eficiente! Como se muestra en la figura siguiente: el
Inserte la descripción de la imagen aquí
resultado de la operación, como se muestra en la figura siguiente:
Inserte la descripción de la imagen aquí
se han eliminado las comillas, ¿está muy contento? Jajajajajaja, me reí de nuevo. Como aún no ha terminado, no es tan fácil aprender de las Escrituras. . Aún no puede usar este enlace para acceder a las solicitudes, porque hay un carácter de escape \, lo que conduce a un error, ¡y el corazón colapsa directamente en ese momento! ¿Este es el final después de mucho tiempo? ? ¿Eso es? ? Como se muestra a continuación:
Inserte la descripción de la imagen aquí
¡Calma! Si no entramos en pánico y observamos con atención, encontraremos que todos los caracteres de escape \ están delante de /. Solo piense en una forma de reemplazar el carácter de escape con /. ¡Lo probé y no funcionó! ! Entonces, probé otros métodos. Hasta el final, pensé en la idea de reorganizar después de desmantelar (algo así como distribuir). Primero desmantelé el enlace problemático y lo reorganicé sin agregar el carácter de escape. Siguiendo este hilo de pensamiento, finalmente encontré una salida y resolví el problema con éxito. !

Es demasiado tarde para decir que es rápido, vi que definí una lista (contenedor), luego la desensamblé y la puse en la lista, como se muestra en la siguiente figura:
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
De esta figura similar al código Morse, podemos ver que el carácter de escape \) Se ha convertido en \, ¡hay algo que hacer!
A continuación, necesitamos eliminar los métodos (funciones) que no son necesarios en la lista (contenedor) \ usando la lista. Como se muestra en la imagen de abajo:
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Jajajaja, finalmente entiendo la verdad, ¡feliz! La siguiente operación es relativamente simple, es decir, definir una variable intermedia para combinar los elementos de la lista (caracteres individuales desensamblados), como se muestra en la siguiente figura:
Inserte la descripción de la imagen aquí
Como resultado, ¡muy lindo! !
Inserte la descripción de la imagen aquí
Este es el último enlace de video que necesitamos, ¡emana un blu-ray de victoria! ! Hagamos clic y echemos un vistazo:
Inserte la descripción de la imagen aquí
después de eso, también necesitamos obtener el nombre del video. Usamos reglas regulares para extraerlo del código fuente de la página original, como se muestra en la siguiente figura: El
Inserte la descripción de la imagen aquí
resultado de la operación es como se muestra en la figura a continuación:
Inserte la descripción de la imagen aquí
Ahora, tenemos la dirección de video y el nombre del video. El módulo os crea una carpeta de ejemplo para almacenar el video en la unidad E, y luego comienza a solicitar la dirección de video de la rutina, como se muestra en la figura siguiente :
Inserte la descripción de la imagen aquí
Puede ver que mi unidad E no tiene una carpeta (directorio) de ejemplo ahora, como se muestra en la siguiente figura:
Inserte la descripción de la imagen aquí
Resultados de la ejecución: la
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
carpeta (directorio) de ejemplo se crea automáticamente y el video también se coloca en ella, como se muestra en la figura siguiente:
Inserte la descripción de la imagen aquí
hagamos clic para reproducir y tomar una captura de pantalla, como se muestra en la figura siguiente:
Inserte la descripción de la imagen aquí
Para las canciones clásicas de Chen Baiqiang, ¿por qué no vas a buscarlas una vez? ? Tenemos que creer en nosotros mismos, todas las dificultades irán mejorando gradualmente.

Finalmente, gracias a todos por venir a ver mi artículo. Puede haber muchas irregularidades en el artículo, y espero señalar a He Haihan.

Supongo que te gusta

Origin blog.csdn.net/weixin_43408020/article/details/113981567
Recomendado
Clasificación