Holen Sie sich zunächst die Ergebnisse hier 2. Artikel, und dann ist die folgende Geschichte in Ordnung.
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.
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.
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
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.
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
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
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).
Obwohl es etwas anders ist, wird die Datei als ./txt/01.csv im folgenden Format erstellt (der Bildschirm befindet sich in der Entwicklung).
Das Erstellen dieser Liste dauert ca. 10 Stunden. Die nächste Bildaufnahme dauert ebenfalls etwa 10 Stunden.
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