Kleines Reptil kriecht Bilder von Kätzchen und speichert sie in einem lokalen Ordner

Kleines Reptil kriecht Bilder von Kätzchen und speichert sie in einem lokalen Ordner

Ich bin ein Doktorand an der Fakultät für Elektrotechnik und Informationstechnik der Anhui University of Technology. Es ist wirklich schrecklich, vor kurzem nicht in die Schule zu gehen, weil ich dumm bin, ich muss spät anfangen, um maschinelles Lernen und Computer Vision zu lernen Es fühlt sich langweilig und bedeutungslos an. So gelangweilt zu Hause, kroch ein paar Kätzchenbilder in eine lokale Datei, nur um die Bildverarbeitung für mich zu verwenden. Darüber hinaus ist es auch sehr süß! Okay, fangen wir mit unseren praktischen Übungen an!

1. Einige Bibliotheken
benötigt 5 Bibliotheken werden hier benötigt. Wenn Sie einfacher sein möchten, können Sie auch einige entfernen.
gevent-Paket: Dies ist ein unverzichtbares Paket für die Verwendung mehrerer Coroutinen. Wenn Sie nicht mehrere Coroutinen verwenden, können Sie dieses Zeitpaket nicht verwenden
: Dies kann zum Timing und auch zum Festlegen des Crawling-Intervalls verwendet werden, da es sonst nicht serverfreundlich ist Es ist nicht gut. .
Anforderungspaket: Dies ist erforderlich, um URL-Links zu verarbeiten und darauf zu antworten.
BeautifuiSoup-Paket: Hiermit wird die Antwort-URL analysiert.
Betriebssystempaket: Erstellen Sie einen Ordner.

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. Nachdem wir die erforderliche Bibliothek importiert haben, müssen wir die URL der Webseite analysieren, um festzustellen, wo das Antwortbild versteckt ist, um zu crawlen. Die URL, die ich hier verwendet habe, ist die
Kitty-Website.
Wenn Sie sie öffnen, finden Sie viele süße Kätzchen, wodurch die Leute nicht bereit sind zu gehen (haha, nicht zum Thema gehörend). Der URL-Link ist im img src versteckt.
Was ich hier verwendet habe, ist, mit dem kleinsten Vater zu finden, und der kleinste Vater, den ich gefunden habe, ist

'div',class_='il_img'

Ohne weiteres wird der gesamte Code, den ich gecrawlt habe, unten angezeigt, was im Grunde genommen auf einen Blick sehr einfach und klar ist.

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. Der nächste Schritt besteht darin, das Bild in einer lokalen Datei zu speichern. Verwenden Sie zuerst das OS-Modul, um einen Ordner zu erstellen. Nach der Erstellung handelt es sich um ein Bild, das im wb-Modus in den Ordner geschrieben wird.

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. Außerdem habe ich fünf Crawler für das asynchrone Crawlen hinzugefügt, die schneller sind.
Fügen Sie hier eine Bildbeschreibung ein
5. Okay, nachdem wir so viel gesagt haben, sind wir an der Reihe zu sehen, was wir endlich bekommen haben. Ich ging zum lokalen Ordner, um den von mir erstellten Catimage-Ordner zu finden. Öffnen Sie, Sie können es sehen (mein Screenshot ist Teil des Bildes), so süß!
Fügen Sie hier eine Bildbeschreibung ein
6. Der gesamte Quellcode wird wie folgt bereitgestellt!

#需要导入的库
#我采用多协程方式
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)

In Ordnung. Wenn Sie nicht verstehen, können Sie mir einen Kommentar abgeben!

Veröffentlicht 2 Originalartikel · Gelobt 3 · Besuche 89

Ich denke du magst

Origin blog.csdn.net/Jshauishaui/article/details/105576502
Empfohlen
Rangfolge