J'ai essayé de [gratter] des images de mode et des phrases de texte avec Python.

introduction

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 ...)

Environnement d'exécution

J'ai essayé de gratter l'image et l'introduction du produit sous forme d'ensemble.

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.

Supplément

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.

Détails de la fonction définie

Fonction pour obtenir l'URL de chaque élément sur chaque page


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.)

Fonction pour obtenir l'instruction de texte dans la page de détail de chaque élément

#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.

Fonction pour obtenir les informations d'image (URL de l'image) de chaque élément

#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. スクリーンショット 2020-05-22 0.23.19.png

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.

Résumé

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

J'ai essayé de [gratter] des images de mode et des phrases de texte avec Python.
J'ai essayé le web scraping en utilisant python et sélénium
J'ai essayé de gratter avec Python
J'ai essayé de gratter avec du python
J'ai essayé webScraping avec python.
Extraire du texte d'images avec Python
J'ai essayé de programmer le test du chi carré en Python et Java.
J'ai créé une classe en Python et essayé de taper du canard
Lire et écrire du texte en Python
J'ai essayé la notification de ligne en Python
J'ai essayé d'implémenter PLSA en Python
J'ai essayé d'implémenter la permutation en Python
J'ai essayé d'implémenter PLSA dans Python 2
J'ai essayé d'utiliser l'optimisation bayésienne de Python
J'ai essayé d'implémenter ADALINE en Python
J'ai essayé d'implémenter PPO en Python
J'ai essayé de gratter la météo Yahoo (édition Python)
Lire des caractères dans des images avec Python OCR
J'ai essayé de gratter
J'ai essayé la détection d'objets en utilisant Python et OpenCV
J'ai essayé de jouer à un jeu de frappe avec Python
J'ai essayé de simuler "Birthday Paradox" avec Python
J'ai essayé la méthode des moindres carrés en Python
J'ai écrit une classe en Python3 et Java
J'ai essayé la différenciation jacobienne et partielle avec python
J'ai essayé la synthèse de fonctions et le curry avec python
J'ai essayé d'implémenter TOPIC MODEL en Python
J'ai essayé le comportement d'E / S Eventlet non bloquant en Python
J'ai essayé d'ajouter un module Python 3 en C
J'ai essayé d'implémenter le tri sélectif en python
Texte de cluster en Python
J'ai essayé Python> autopep8
Traitement de texte avec Python
J'ai essayé Python> décorateur
J'ai essayé de représenter graphiquement les packages installés en Python
J'ai essayé pipenv et asdf pour le contrôle de version Python
J'ai essayé d'utiliser google test et CMake en C
J'ai essayé d'utiliser TradeWave (commerce du système BitCoin en Python)
J'ai essayé d'implémenter un pseudo pachislot en Python
J'ai essayé d'implémenter le poker de Drakue en Python
J'étais accro au grattage avec Selenium (+ Python) en 2020
J'ai essayé d'implémenter GA (algorithme génétique) en Python
J'ai essayé de résumer comment utiliser les pandas de python
Python: j'ai essayé menteur et honnête
Python Open CV a essayé d'afficher l'image sous forme de texte.
J'ai essayé la "conversion de morphologie" de l'image avec Python + OpenCV
J'ai essayé différentes choses avec Python: le grattage (Beautiful Soup + Selenium + PhantomJS) et l'analyse morphologique
J'ai essayé fp-growth avec python
Traitement de texte UTF8 avec python
J'ai écrit python en japonais
Encodage base64 des images en Python 3
J'ai essayé de créer une API list.csv avec Python à partir de swagger.yaml
Grattage au sélénium en Python
[Python] Scraping dans AWS Lambda
J'ai essayé d'implémenter un automate cellulaire unidimensionnel en Python
Grattage avec chromedriver en python
J'ai eu une erreur dans vim ou zsh dans la série Python 3.7