Tout d'abord, récupérez les livrables ici 2e article, puis l'histoire suivante est OK.
Connaissez-vous un site merveilleux appelé find / 47? De belles images de paysages de 47 préfectures du pays sont fournies en haute qualité. Selon notre enquête, à la fin d'octobre 2020, il existe un total de 1080 types dans tout le pays, et (selon l'image) ceux-ci peuvent être téléchargés avec une résolution de S, M, L, XL. Cependant, si vous regardez rapidement le nombre d'accès publics, il semble qu'il ne soit pas entièrement reconnu et utilisé, et c'est regrettable. Donc, dans cet article (2 fois +), j'utilise Python pour (1) créer une liste d'images, (2) la télécharger et (3) utiliser Ubuntu / LXDE pour [variété](https: // peterlevi. Je vais vous présenter comment réaliser un environnement de changement automatique pour les fonds d'écran en utilisant com / variété /). À un niveau, c'est une introduction "quelque chose que vous voulez réaliser avec le scraping, l'implémenter en Python et le vérifier". Je n'ai moi-même pas fait beaucoup de technique ou d'optimisation. Notez s'il vous plaît. En fin de compte, je suis heureux de réaliser un bureau comme celui de l'image ci-dessous (comme passe-temps personnel). C'est tout.
Ce premier article n'affectera pas l'exécution, mais vous aurez besoin d'environ 10 Go d'espace libre pour télécharger les images. Dans le deuxième ou le troisième article, je vais aborder la manière de réduire la résolution et la capacité de téléchargement des images.
Veuillez le faire de manière appropriée.
Ubuntu
$ cat /etc/issue
Ubuntu 20.04.1 LTS \n \l
Python
$ python3 --version
Python 3.8.5
installed by pip3 Il peut y en avoir d'autres. Regardez le début du code et agissez.
$ pip3 list
beautifulsoup4 4.8.2
requests 2.22.0
tqdm 4.50.2
Il y a 6 étapes pour enregistrer l'image. Dans cet article 1/2, nous ferons 1 à 3 étapes. Plus précisément, il produit une liste d'images à télécharger dans un fichier texte sous une forme quelque peu lisible. Tout d'abord, lors du tournage de pages, créez-le sous une forme totalement illisible (étape 01, en mémoire), ajoutez des informations de taille à chaque ligne de la liste (étape 02, en mémoire) et sortie au format CSV (étape 03, en mémoire) Sortie de fichier). Jusqu'à présent, vous avez obtenu quelle région (0-7), quelle préfecture (0-46), quel nom de fichier (Remarque: pas d'extension), quelle taille (xl, x, m, s) et au total. Déterminez le nombre d'images que vous pouvez obtenir.
Créez un dossier approprié (par exemple / home / nekoneko / codes / python / find47) et enregistrez-le sous le nom de fichier 01_generate_urls.py directement en dessous.
#!/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
Enregistrez-le sous le nom de fichier 47_finder.sh directement dans le dossier approprié créé (par exemple / home / nekoneko / codes / python / find47). De plus, 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
Il est recommandé de le mettre dans cron. Le fichier journal est ./txt/01.log. Il peut être confirmé que toutes les images 1080 sont dans 8 zones (de Hokkaido à Kyushu Okinawa).
Bien que ce soit un peu différent, le fichier est créé en tant que ./txt/01.csv dans le format suivant (l'écran est en cours de développement).
La création de cette liste prend environ 10 heures. La prochaine acquisition d'image prendra également environ 10 heures.
Cet article présente la procédure d'acquisition de belles images de paysages de 47 préfectures du pays en utilisant Python à partir du merveilleux site find / 47. Parmi ceux-ci, cette fois, j'ai expliqué jusqu'au point où l'URL cible est sortie dans un fichier texte avec du code. Dans le prochain article, nous obtiendrons des images basées sur la liste obtenue cette fois.
Recommended Posts