Holen Sie sich mit Python Bilder von großartigen Find / 47-Sites (1/2: Bis zur Erstellung der Zielliste)

Nachtrag nach Veröffentlichung des Artikels

Holen Sie sich zunächst die Ergebnisse hier 2. Artikel, und dann ist die folgende Geschichte in Ordnung.

zunaechst

Kennen Sie eine wunderbare Seite namens find / 47? Schöne Landschaftsbilder von 47 Präfekturen im ganzen Land werden in hoher Qualität geliefert. Laut unserer Umfrage gibt es Ende Oktober 2020 landesweit insgesamt 1080 Typen, die (je nach Bild) mit einer Auflösung von S, M, L, XL heruntergeladen werden können. Wenn Sie sich jedoch kurz die Anzahl der öffentlichen Zugriffe ansehen, scheint dies nicht vollständig erkannt und genutzt zu werden, und es ist bedauerlich. In diesem Artikel (2 Mal +) verwende ich Python, um (1) eine Liste von Bildern zu erstellen, (2) sie herunterzuladen und (3) Ubuntu / LXDE für [Varieté](https: // peterlevi) zu verwenden. Ich werde vorstellen, wie eine Umgebung mit automatischem Wechsel für Hintergrundbilder mit com / variante /) realisiert wird. Auf einer Ebene handelt es sich um eine Einführung: "Etwas, das Sie mit Scraping erreichen, in Python implementieren und überprüfen möchten." Ich selbst habe nicht viel Technik oder Optimierung gemacht. Bitte beachten Sie. Am Ende bin ich froh, einen Desktop wie den im Bild unten zu realisieren (als persönliches Hobby). Das ist alles. image.png

Zu beachtende Punkte

Dieser erste Artikel hat keinen Einfluss auf die Ausführung, aber Sie benötigen ca. 10 GB freien Speicherplatz, um die Bilder herunterzuladen. Im zweiten oder dritten Artikel werde ich darauf eingehen, wie die Auflösung und die Downloadkapazität für Bilder verringert werden können.

Betriebsumgebung

Bitte machen Sie es angemessen.

Ubuntu

$ cat /etc/issue
Ubuntu 20.04.1 LTS \n \l

Python

$ python3 --version
Python 3.8.5

installed by pip3 Es kann andere geben. Schauen Sie sich den Anfang des Codes an und ergreifen Sie Maßnahmen.

$ pip3 list
beautifulsoup4               4.8.2
requests                     2.22.0
tqdm                         4.50.2

Funktionsübersicht und Code

Betriebsübersicht

Es gibt 6 Schritte, um das Bild zu speichern. In diesem 1/2 Artikel werden wir 1-3 Schritte ausführen. Insbesondere wird eine Liste von Bildern ausgegeben, die in einer etwas lesbaren Form in eine Textdatei heruntergeladen werden sollen. Machen Sie es beim Umblättern zunächst umfassend in einer schlecht lesbaren Form (Stufe 01, im Speicher), fügen Sie jeder Zeile der Liste (Stufe 02, im Speicher) Größeninformationen hinzu und geben Sie sie im CSV-Format aus (Stufe 03, im Speicher). Dateiausgabe). Bisher haben Sie welche Region (0-7), welche Präfektur (0-46), welchen Dateinamen (Hinweis: keine Erweiterung), welche Größe (xl, x, m, s) und insgesamt erhalten. Bestimmen Sie, wie viele Bilder Sie erhalten können.

コード(1)01_generate_urls.py

Erstellen Sie einen geeigneten Ordner (z. B. / home / nekoneko / Codes / Python / Find47) und speichern Sie ihn unter dem Dateinamen 01_generate_urls.py direkt darunter.

#!/usr/bin/env python3
# coding+ utf-8

import csv
import re
import requests
import subprocess
import time
from bs4 import BeautifulSoup

# e.g. https://search.find47.jp/ja/images?area=kinki&prefectures=kyoto&page=3

# declare variables

base_url            =   'https://search.find47.jp/ja/images?'

valid_urls          = []
target_urls         = []

areas               = [ 'hokkaido', 'tohoku', 'kanto-koshinetsu', 'tokai-hokuriku', 'kinki',
                        'chugoku' , 'sikoku', 'kyushu-okinawa' ]
prefs_head_by_area  = [  0,  1,  7, 17, 24, 30, 35, 39 ]
prefs_count_by_area = [  1,  6, 10,  7,  6,  5,  4,  8 ]
prefectures         = [
                        'hokkaido' ,

                        'aomori'   , 'iwate'     , 'miyagi'    , 'akita'    , 'yamagata' ,
                        'fukushima',

                        'tokyo'    , 'kanagawa'  , 'saitama'   , 'chiba'    , 'ibaraki'  ,
                        'tochigi'  , 'gunma'     , 'yamanashi' , 'niigata'  , 'nagano'   ,

                        'toyama'   , 'ishikawa'  , 'fukui'     , 'gifu'     , 'shizuoka' ,
                        'aichi'    , 'mie'       ,

                        'shiga'    , 'kyoto'     , 'osaka'     , 'hyogo'    , 'nara'     ,
                        'wakatama' ,

                        'tottori'  , 'shimane'   , 'okayama'   , 'hitoshima', 'yamaguchi',

                        'tokushima', 'kagawa'    , 'ehime'     , 'kochi'    ,

                        'fukuoka'  , 'saga'      , 'nagasaki'  , 'kumamoto' , 'oita'     ,
                        'miyazaki' , 'kagoshima' , 'okinawa'
                      ]

image_sizes         = ['xl' , 'l' , 'm' , 's']
max_pages           = 21
waiting_seconds     = 6

# make output folder

command = ('mkdir', '-p', './txt')
res     = subprocess.call(command)

# functions

def generate_target_urls():
    for  i in range(0,len(prefs_head_by_area)):

        for j in range(prefs_head_by_area[i], \
                       prefs_head_by_area[i] + prefs_count_by_area[i]):

            for k in range(1, max_pages):
                target_url = base_url \
                 + 'area=' + areas[i] \
                 + '&prefectures='\
                 + prefectures[j] \
                 + '&page=' \
                 + str(k)

                time.sleep(waiting_seconds)
                html          = requests.get(target_url)
                html.encoding = 'utf-8'
                soup          = BeautifulSoup(html.text, 'html.parser')
                atags         = soup.find_all('a')

                for l in atags:
                    m = l['href']
                    n = '^/ja/i/'
                    o = re.match( n, m )
                    if o:
                        target_urls.append([i, j, m, 'z'])
                    else:
                        None
    return

def update_details_in_target_urls():
    base_image_url = 'https://search.find47.jp/ja/images/'
    for i in target_urls:

        for j in image_sizes:
            time.sleep(waiting_seconds)
            image_url = base_image_url + str(i[2][-5:]) + '/download/' + j
            image_link = requests.get(image_url)

            if image_link.status_code == 200:
                target_urls[target_urls.index(i)][2] = str(i[2][-5:])
                target_urls[target_urls.index(i)][3] = j
                break
    return

def write_out_to_csv_file():
    with open('./txt/01.csv', mode = 'w', encoding = 'utf-8') as f:
        for i in target_urls:
            writer = csv.writer(f)
            writer.writerow(i)
    f.close()
    return

# main routine
## generate target urls list as a text file with info in a simple format.

### stage 01
print('stage 01/03 started.')
generate_target_urls()
print('stage 01 completed.')

### stage 02
print('stage 02/03 started.')
update_details_in_target_urls()
print('stage 02 completed.')

### stage 03
print('stage 03/03 started.')
write_out_to_csv_file()
print('stage 03/03 completed.')
print('All operations of 01_generate_urls.py completed.')

# end of this script

Code (2)

Speichern Sie es mit dem Dateinamen 47_finder.sh direkt unter dem erstellten entsprechenden Ordner (z. B. / home / nekoneko / Codes / Python / Find47). Außerdem chmod + x.

#!/bin/bash
cd /home/nekoneko/codes/python/find47

python3 ./01_generate_urls.py > ./txt/01.log 2>&1
#python3 ./02_download_jpgs.py > ./txt/02.log 2>&1

Lauf

Es wird empfohlen, es in cron zu legen. Die Protokolldatei lautet ./txt/01.log. Es kann bestätigt werden, dass sich alle 1080 Bilder in 8 Bereichen befinden (von Hokkaido bis Kyushu Okinawa). image.png

Ausführungsbeispiel

Obwohl es etwas anders ist, wird die Datei als ./txt/01.csv im folgenden Format erstellt (der Bildschirm befindet sich in der Entwicklung). image.png

Geschätzte Zeit erforderlich

Das Erstellen dieser Liste dauert ca. 10 Stunden. Die nächste Bildaufnahme dauert ebenfalls etwa 10 Stunden.

Diese Zusammenfassung

In diesem Artikel wird das Verfahren zum Erfassen wunderschöner Landschaftsbilder von 47 Präfekturen im ganzen Land mit Python von der wunderbaren Website find / 47 vorgestellt. Von diesen habe ich diesmal bis zu dem Punkt erklärt, an dem die Ziel-URL in eine Textdatei mit Code ausgegeben wird. Im nächsten Artikel erhalten wir Bilder basierend auf der diesmal erhaltenen Liste.

Recommended Posts

Holen Sie sich mit Python Bilder von großartigen Find / 47-Sites (1/2: Bis zur Erstellung der Zielliste)
[Python] Ruft eine Liste der Instanzvariablen ab
[Python] Nur eine Liste der Ordner abrufen
Entfernen Sie DICOM-Bilder in Python
Anonymer Upload von Bildern mit der Imgur-API (mit Python)
Liste der Verteilungsseiten für Beispielprogramme für Python-Bücher
[Python] Ruft die Liste der im Modul definierten Klassen ab
Versuchen Sie, die Bildkonvertierung mit OpenCV mit Python zu projizieren
[Python] Verwenden der Linien-API [1. Erstellung des Beauty-Bots]
[Python] Ruft die Liste der ExifTags-Namen der Pillow-Bibliothek ab
[Python] Zusammenfassung der Methode zur Tabellenerstellung mit DataFrame (Pandas)
Python: Ruft eine Liste der Methoden für ein Objekt ab
Liste der Python-Module
Die findähnliche Sache der Liste in Python
Holen Sie sich die Anzahl der spezifischen Elemente in der Python-Liste
Holen Sie sich eine Liste der mit Python + Selen gekauften DMM-E-Books
Discords Python 1.5 oder höher, ich kann keine Liste der Mitglieder erhalten
Ruft den Index des n-ten größten / kleinsten Werts in der Liste in Python ab
So erhalten Sie eine Liste der integrierten Ausnahmen für Python
Liste der zu installierenden Bibliotheken bei der Installation von Python mit Pyenv
Ruft den Index des n-ten größten / kleinsten Werts in der Liste in Python ab
[Python3] Liste der Websites, auf die ich beim Starten von Python verwiesen habe
Speichern Sie Bilder mit Python3-Anforderungen
Zusammenfassung der Python3-Listenoperationen
Liste der selbst erstellten Docker-Bilder
Python: Grundlagen der Verwendung von Scikit-Learn ①
[Python] Kopie einer mehrdimensionalen Liste
Beschleunigen Sie das Laden von Python-Bildern
Ich habe versucht, den Index der Liste mithilfe der Aufzählungsfunktion abzurufen
Versuchen Sie, die Thread-Liste der Nachrichten (Abneigung) mit Python zu erhalten.
[Python] Ermittelt den Rang der Werte in der Liste in aufsteigender / absteigender Reihenfolge
Ausrichten gescannter Bilder von animiertem Videopapier mit OpenCV und Python
Rufen Sie den Wert des Dropdown-Menüs mit Python und Selen ab und legen Sie ihn fest
Ruft eine Liste der Dateien in einem Ordner mit Python ohne Pfad ab