Premier message de Qiita, alors n'hésitez pas.
Je suis actuellement dans ma première année de maîtrise, et je pense faire quelque chose sur le thème du deep learning et de la mode dans mes recherches.
Alors, tout d'abord, après avoir étudié, j'ai décidé de classer les images, et j'ai essayé de collecter les données moi-même. (Si vous classez en utilisant un ensemble de données existant, oui ...)
Cette fois, j'ai utilisé la bibliothèque lxml de Python pour gratter des images et des phrases de texte. Loin de gratter, j'étais un débutant dans la programmation elle-même, alors référez-vous à "Python Crawling & Scraping" publié par Technical Review. J'ai créé le code moi-même. Si je connaissais l'existence de Qiita à partir de cette époque, cela aurait dû être résolu par Qiita ... Le code est ci-dessous.
Cette fois, je voulais gratter uniquement les t-shirts pour hommes, j'ai donc précisé la catégorie et le sexe. Le site EC de ZOZOTOWN a 135 produits sur chaque page, et en cliquant sur chaque produit vous amènera à la page de détails de ce produit. Cette fois, j'écris le code pour gratter le texte de la page vers laquelle je me suis déplacé et l'image du haut.
scraping_zozo_img_text.py
from typing import Iterator
from typing import List
import requests
import lxml.html
import time
import csv
import os
Ce qui suit est l'exécution principale.
csvlist = [['no', 'URL', 'item_text']]
i = 0
u = 0
j = 0
URL = "https://zozo.jp/men-category/tops/tshirt-cutsew/?pno="
for page in range(1, 100):
time.sleep(1)
pageUrl = "https://zozo.jp/men-category/tops/tshirt-cutsew/?pno=" + str(page)
response = requests.get(pageUrl)
#Obtenez l'URL de la page de détail de chaque élément de la page de liste ↓ ↓ ↓ ↓
urls = scrape_item_page(response) #Chaque objet(Correspond à l'image sur la page de liste)L'URL de la page de détail de est obtenue.
for url in urls:
j = j + 1
time.sleep(1)
#Ramassez les images et enregistrez-les dans un dossier ↓↓↓↓↓↓↓
img_url = get_image(url)
w_img = requests.get(img_url)
with open(str('picture_zozo/')+str(j)+str('.jpg'),'wb') as file:
file.write(w_img.content)
info = scrape_item_infomation(url)
print(info)
csvlist.append([j, url, info])
f = open("item_text.csv", 'w')
writecsv = csv.writer(f)
writecsv.writerows(csvlist)
f.close()
La réponse sur la 10ème ligne doit avoir une image qui contient diverses informations dans la page URL.
def scrape_item_page(response: requests.Response) -> Iterator[str]:
html = lxml.html.fromstring(response.text)
html.make_links_absolute(response.url)
url=[]
for a in html.cssselect('#searchResultList > li > div[class="catalog-item-container"] > a'):
url.append(a.get('href'))
return url
Ligne 12 de la piste principale. response.text est le code complet de html. Vous pouvez obtenir le HtmlElement directement à l'aide de la fonction fromstring. Réécrivez les liens relatifs vers des liens absolus avec make_links_absolute. Dans la 6ème ligne, utilisez cssselect pour suivre la balise html et obtenir les informations de la balise, y compris l'URL de la page de détail de chaque produit. Vous pouvez obtenir l'URL suivant ** href ** dans la balise que vous avez obtenue à la ligne 7. (Obtenez 135 URL sur chaque page.)
#Définissez une fonction pour accéder à l'URL de chaque article et obtenir la présentation du produit
def scrape_item_infomation(url):
response = requests.get(url)
response.encoding = response.apparent_encoding
html = lxml.html.fromstring(response.text)
infomation = html.cssselect('#tabItemInfo > div[class="innerBox"] > div[class="contbox"]')
info = infomation[0].text_content()
return info
Dans la 15e ligne de la principale, sélectionnez une URL parmi 135 pour obtenir l'image et le texte. L'encodage sur la 5ème ligne empêche les caractères déformés. Ce qui suit est le même que précédemment, et affecte finalement une phrase de texte à ** info ** et la renvoie.
#Définir une fonction qui récupère les informations sur l'image
def get_image(url): #URL de la page de liste
response = requests.get(url)
html = lxml.html.fromstring(response.text)
html.make_links_absolute(response.url)
image = html.cssselect('#photoMain > img')
for img in image:
img_url = img.get('src')
print(img_url)
return img_url
C'est presque le même que le flux d'obtention de texte. Ici vous pouvez obtenir les informations de l'image.
Sur la 21e ligne de la principale, j'écris le code pour enregistrer l'image dans le dossier. À ce stade, le script et le dossier doivent être dans la même hiérarchie. Veuillez noter que vous obtiendrez une erreur si vous ne créez pas de dossier vide à l'avance.
Au fait, j'ai créé un dossier appelé "image_zozo".
Enfin, enregistrez le "numéro de l'élément (numéro)", "URL de l'élément" et "texte texte" dans le fichier CSV. Vous pouvez l'utiliser pour vérifier si l'image acquise et l'image sur la page lorsque vous cliquez sur l'URL sont le même produit.
À propos, l'image est enregistrée comme ça.
Au fait, le fichier CSV ressemble à ceci.
No | URL | text |
---|---|---|
1 | https://〜 | 〇〇 |
2 | https://〜 | △△ |
3 | https://〜 | □□ |
La valeur de Non et la valeur de ○ .jpg sont identiques.
Étant donné que la même URL est utilisée sous l'instruction for de l'exécution principale, la combinaison de texte et d'image est le même produit.
J'ai essayé de publier Qiita pour la première fois, mais il est assez difficile de le transmettre en phrases. Je ne l'ai pas suffisamment maîtrisé pour l'expliquer parfaitement, donc je pense qu'il est difficile de comprendre l'explication, mais pardonnez-moi s'il vous plaît. Si l'image est difficile à afficher, vous pouvez en fait vous référer au code et le vérifier en utilisant print ().
Recommended Posts