Pequeño reptil rastrea fotos de gatitos y las guarda en la carpeta local

Pequeño reptil rastrea fotos de gatitos y las guarda en la carpeta local

Soy un estudiante graduado en la Facultad de Ingeniería Eléctrica y de la Información, Universidad Tecnológica de Anhui. Es realmente horrible no comenzar la escuela recientemente, porque soy estúpido, tengo que empezar tarde para aprender el aprendizaje automático y la visión por computadora, pero siempre aprendo esto Se siente aburrido y sin sentido. Tan aburrido en casa, arrastré algunas fotos de gatitos en un archivo local, solo para usar el procesamiento de imágenes para mí. Además, también es muy lindo! Bien, ¡comencemos nuestros ejercicios prácticos!

1. Algunas bibliotecas
necesitan 5 bibliotecas aquí, por supuesto, si quiere ser más simple, también puede eliminar algunas.
paquete gevent: este es un paquete indispensable para usar múltiples corutinas. Si no está utilizando múltiples corutinas, no puede usar este
paquete de tiempo: puede usarse para cronometrar y también para establecer el intervalo de rastreo, de lo contrario no es amigable para el servidor No es bueno .
paquete de solicitud: esto es necesario para procesar y responder a enlaces URL.
Paquete BeautifuiSoup: Esto es para analizar la URL de respuesta.
paquete os: crea una carpeta.

from gevent import monkey
monkey.patch_all()
from gevent.queue import Queue
import requests
from bs4 import BeautifulSoup
import gevent
import time
import os

2. Después de importar la biblioteca requerida, debemos analizar la URL de la página web para ver dónde está oculta la imagen de respuesta, para poder rastrearla. La URL que utilicé aquí es el
sitio web del gatito.
Cuando lo abres, encontrarás muchos gatitos lindos, y la gente es reacia a irse (jaja, fuera de tema). Bueno, abrimos la página web para verificar y encontrar al gatito El enlace URL está oculto en el img src.
Lo que usé aquí es encontrar con el padre más pequeño, y el padre más pequeño que encontré es

'div',class_='il_img'

Sin más preámbulos, todo el código que rastreé se muestra a continuación, que es básicamente muy simple y claro de un vistazo.

def pachong():
    while not work.empty():
        url = work.get_nowait()
        res = requests.get(url,headers = headers)
        jiexi = BeautifulSoup(res.text,'html.parser')
        fuxi = jiexi.find_all('div',class_='il_img')
        for i in fuxi:
            photo = i.find_all('a')[0].find('img')['src']
            transform = str(photo)
            add = 'https:' + transform
            image.append(add)

3. El siguiente paso es almacenar la imagen en un archivo local. Primero use el módulo os para crear una carpeta. Después de la creación, es una imagen y se escribe en la carpeta en modo wb.

dir_name = 'catimage'
            #在当前目录下创建文件夹
            if not os.path.exists(dir_name):
                os.mkdir(dir_name)

            i = 0
            for img in image:
                #给它一点点时间,不然可能会把服务器搞崩掉。。
                time.sleep(0.1)
                picture_name = img.split('/')[-1] #提取图片url后缀,一定要用!
                response = requests.get(img,headers = headers)
                
                with open(dir_name+'/'+picture_name,'wb') as f:
                    f.write(response.content)
                 

4. Además, también agregué cinco rastreadores para el rastreo asíncrono, que será más rápido.
Inserte la descripción de la imagen aquí
5. Bien, después de decir tanto, es nuestro turno de ver lo que finalmente obtuvimos. Fui a la carpeta local para encontrar la carpeta de catimage que creé. Abierto, puedes verlo (mi captura de pantalla es parte de la imagen), ¡qué lindo!
Inserte la descripción de la imagen aquí
6. ¡El código fuente general se proporciona de la siguiente manera!

#需要导入的库
#我采用多协程方式
from gevent import monkey
monkey.patch_all()
from gevent.queue import Queue
import requests
from bs4 import BeautifulSoup
import gevent
import time
import os


#用time.time()方法来记录爬取的时间
starttime = time.time()
work = Queue()
start_url = 'https://www.ivsky.com/tupian/xiaomao_t3023/index_{page}.html'
#头文件还是要加的,不然会被服务器拦截掉,导致爬取不到
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36'}

#对服务器不能太狠,所以只爬取4页就好了。。。
for x in range(1,5):
    real_url = start_url.format(page = x)
    work.put_nowait(real_url)


image = []

#主要爬虫的操作都在这里
def pachong():
    while not work.empty():
        url = work.get_nowait()
        res = requests.get(url,headers = headers)
        jiexi = BeautifulSoup(res.text,'html.parser')
        fuxi = jiexi.find_all('div',class_='il_img')
        for i in fuxi:
            photo = i.find_all('a')[0].find('img')['src']
            transform = str(photo)
            add = 'https:' + transform
            image.append(add)
            
            dir_name = 'catimage'
            #在当前目录下创建文件夹
            if not os.path.exists(dir_name):
                os.mkdir(dir_name)

            i = 0
            for img in image:
                #给它一点点时间,不然可能会把服务器搞崩掉。。
                time.sleep(0.1)
                picture_name = img.split('/')[-1] #提取图片url后缀,一定要用!
                response = requests.get(img,headers = headers)
                
                with open(dir_name+'/'+picture_name,'wb') as f:
                    f.write(response.content)
                i = i+1
                print('正在爬取第'+str(i)+'张图片')
            
                
     
           
            
task_list = []
for z in range(5):
    task = gevent.spawn(pachong)
    task_list.append(task)
gevent.joinall(task_list)
endtime = time.time()
print('爬取时长:',endtime-starttime)

De acuerdo Si no entiendes, ¡puedes comentarme!

Publicado 2 artículos originales · elogiado 3 · visitas 89

Supongo que te gusta

Origin blog.csdn.net/Jshauishaui/article/details/105576502
Recomendado
Clasificación