[La seguridad de la red lo lleva a practicar Crawlers-100 Practices] Práctica 10: coincidencia regular de re, creación de carpetas, descarga de imágenes

Tabla de contenido

1. Objetivo 1: hacer coincidir regularmente la URL de la imagen

2. Objetivo 2: crear carpetas

3. Objetivo 3: Guardar la imagen en la carpeta de prueba

 4. Pequeño círculo de seguridad en la red


1. Objetivo 1: hacer coincidir regularmente la URL de la imagen

ubicación de URL

Podemos encontrar que img está en esta etiqueta

 

 

Método de solicitud GET

 

Extraer ubicación de URL

Palabras clave para dominar

.*?
//表示匹配任意字符(除换行符)

(.*?)
//表示匹配任意字符(除换行符)0次或多次,尽可能少地匹配,并将这部分内容作为一个分组

La etiqueta de destino es la siguiente:

<div class="thumb">
    <a target="_blank" style="background:url(https://pic.chinaz.com/picmap/thumb/202306271716277907_5.jpg);background-size:cover;background-position:center" rel="noopener noreferrer" href="https://www.chinaz.com/2023/0708/1541405.shtml">
    </a>
</div>

El contenido que necesita ser extraído es el siguiente:

(se añade una \ adicional como carácter de escape)

img_url = <div class="thumb">.*?url\((.*?)).*?</div>


Rastrear todo el contenido de la imagen que coincida con el formato

res: es una expresión regular para patrones coincidentes.

img_url: es la cadena que debe coincidir.

re.S: es un parámetro indicador en el módulo re, lo que significa que la cadena se considera como una sola línea, es decir, el carácter de nueva línea también se considera como un carácter ordinario

img_url_list = re.findall(res,img_url,re.S)


resultado de la operación:

La URL de destino se rastrea hasta

 


Código completo:

import re
import requests

def get_img():
    url = 'https://www.chinaz.com/'
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:107.0) Gecko/20100101 Firefox/107.0",
    }

    res = requests.get(url,headers=headers,timeout=10).text
    img_url = '<div class="thumb">.*?url\((.*?));.*?</div>'

    img_url_list = re.findall(img_url,res,re.S)
    print(img_url_list)

if __name__ == '__main__':
    get_img()



2. Objetivo 2: crear carpetas

Determine si la carpeta existe para decidir si crear la carpeta y use la función os.makedirs() para crear la carpeta de forma recursiva. No hace nada si la carpeta ya existe.

('./test' también se puede reemplazar con parámetros para pasar valores)

(La función os.mkdir() no crea carpetas recursivamente)

import os

if not os.path.exists('./test'):    
    os.makedirs('./test')



3. Objetivo 3: Guardar la imagen en la carpeta de prueba

Procesamiento de datos

Primero recorra la URL de la imagen a su vez y luego elimine los caracteres innecesarios

Use la función replace () para reemplazar caracteres no esenciales con nada

    for u in img_url_list:
        img_u = u.replace("(", "").replace(")", "")
        print(img_u)

Después de ejecutar, la carpeta se creó y la URL se atravesó con éxito

 

Obtener datos de imagen

Una vez que tenga la dirección de la imagen, puede solicitarla

.content devuelve datos en formato binario

        image = requests.get(url=img_u,headers=headers,timeout=10).content

nombra el archivo

Toma el último de la url como su nombre

Eso es https://pic.chinaz.com/picmap/thumb/202306271716277907_5.jpg

Toma 202306271716277907_5.jpg

etcétera

        img_name = img_u.split('/')[-1]

Guardar la imagen localmente

ruta de la imagen

Descargar imágenes a la ruta local

        img_path =  './test/' + img_name
        with open(img_path,'wb') as f:
            f.write(img_data)
        print(img_name + '下载成功!')

resultado de la operación:

Se encontró que había otro dato misceláneo ingresado que causó un error

 

Luego agregué decisivamente una declaración de juicio if

        if re.match(r'https?://', u):

 Finalmente descargado con éxito

 

Código completo:

import re
import requests
import os

def get_img():
    url = 'https://www.chinaz.com/'
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:107.0) Gecko/20100101 Firefox/107.0",
    }
    res = requests.get(url, headers=headers, timeout=10).text
    img_url = r'<div class="thumb">.*?url\((.*?)\);.*?</div>'
    img_url_list = re.findall(img_url, res, re.S)
    for u in img_url_list:
        if re.match(r'https?://', u):
            img_u = u.replace("(", "").replace(")", "")
            img_data = requests.get(url=img_u, headers=headers, timeout=10).content
            img_name = img_u.split('/')[-1]
            img_path = './test/' + img_name
            with open(img_path, 'wb') as f:
                f.write(img_data)
            print(img_name + '下载成功!')
        else:
            continue

if __name__ == '__main__':
    if not os.path.exists('./test'):
        os.makedirs('./test')
    get_img()



 4. Pequeño círculo de seguridad en la red

README.md Libro Bansheng/Network Security Knowledge System-Practice Center-Code Cloud-Open Source China (gitee.com) https://gitee.com/shubansheng/Treasure_knowledge/blob/master/README.md

GitHub - BLACKxZONE/Treasure_knowledge https://github.com/BLACKxZONE/Treasure_knowledge

Supongo que te gusta

Origin blog.csdn.net/qq_53079406/article/details/131610224
Recomendado
Clasificación