Ich habe versucht, mit Python Modebilder und Textsätze zu [kratzen].

Einführung

Qiitas erster Beitrag, also zögern Sie nicht.

Ich bin gerade in meinem ersten Jahr der Meisterschaft und denke darüber nach, in meiner Forschung etwas zum Thema Deep Learning und Mode zu tun.

Nachdem ich studiert hatte, entschied ich mich zunächst, die Bilder zu klassifizieren, und ich habe versucht, die Daten selbst zu sammeln. (Wenn Sie anhand eines vorhandenen Datensatzes klassifizieren, ja ...)

Ausführungsumgebung

Ich habe versucht, das Bild und die Produkteinführung als Set zu kratzen.

Diesmal habe ich Pythons lxml-Bibliothek verwendet, um Bilder und Textsätze zu kratzen. Weit davon entfernt, zu kratzen, war ich ein Anfänger in der Programmierung selbst, siehe "Python Crawling & Scraping", veröffentlicht von Technical Review. Ich habe den Code selbst gemacht. Wenn ich die Existenz von Qiita aus dieser Zeit gewusst hätte, hätte es von Qiita gelöst werden müssen ... Der Code ist unten.

Ergänzung

Dieses Mal wollte ich nur Männer-T-Shirts kratzen, also gab ich die Kategorie und das Geschlecht an. Auf der EC-Website von ZOZOTOWN finden Sie 135 Produkte auf jeder Seite. Wenn Sie auf jedes Produkt klicken, gelangen Sie zur Detailseite für dieses Produkt. Dieses Mal schreibe ich den Code, um den Text der Seite, auf die ich verschoben habe, und das obere Bild zu entfernen.

scraping_zozo_img_text.py


from typing import Iterator
from typing import List
import requests
import lxml.html
import time
import csv
import os

Das Folgende ist die Hauptausführung.

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)

    #Holen Sie sich die URL der Detailseite jedes Elements auf der Listenseite ↓ ↓ ↓ ↓
    urls = scrape_item_page(response) #Jeder Gegenstand(Entspricht dem Bild auf der Listenseite)Die URL zur Detailseite von wird abgerufen.


    for url in urls:
        j = j + 1
        time.sleep(1)

        #Nehmen Sie Bilder auf und speichern Sie sie in einem Ordner ↓↓↓↓↓↓↓
        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()


Die Antwort in der 10. Zeile sollte ein Bild enthalten, das verschiedene Informationen auf der URL-Seite enthält.

Details der definierten Funktion

Funktion zum Abrufen der URL für jedes Element auf jeder Seite


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

Zeile 12 des Hauptlaufs. response.text ist der vollständige HTML-Code. Sie können das HtmlElement direkt mithilfe der fromstring-Funktion abrufen. Schreiben Sie relative Links zu absoluten Links mit make_links_absolute um. Verwenden Sie in der 6. Zeile cssselect, um dem HTML-Tag zu folgen und die Tag-Informationen einschließlich der URL der Detailseite jedes Produkts abzurufen. Sie können die URL nach ** href ** in dem Tag erhalten, das Sie in Zeile 7 erhalten haben. (Holen Sie sich 135 URLs auf jeder Seite.)

Funktion zum Abrufen der Textanweisung auf der Detailseite jedes Elements

#Definieren Sie eine Funktion, um auf die URL jedes Artikels zuzugreifen und die Produkteinführung zu erhalten

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

Wählen Sie in der 15. Zeile des Hauptmenüs eine URL aus 135 aus, um das Bild und den Text zu erhalten. Die Codierung in der 5. Zeile verhindert verstümmelte Zeichen. Das Folgende ist das gleiche wie zuvor und weist ** info ** schließlich einen Textsatz zu und gibt ihn zurück.

Funktion zum Abrufen der Bildinformationen (Bild-URL) jedes Elements

#Definieren Sie eine Funktion, die Bildinformationen abruft

def get_image(url): #Seiten-URL auflisten
    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

Es ist fast das Gleiche wie der Textfluss. Hier können Sie die Informationen des Bildes erhalten.

In der 21. Zeile des Mains schreibe ich den Code, um das Bild im Ordner zu speichern. Zu diesem Zeitpunkt müssen sich das Skript und der Ordner in derselben Hierarchie befinden. Bitte beachten Sie, dass eine Fehlermeldung angezeigt wird, wenn Sie nicht im Voraus einen leeren Ordner erstellen.

Übrigens habe ich einen Ordner namens'picture_zozo 'erstellt.

Speichern Sie abschließend die "Nummer des Artikels (Nummer)", die "URL des Artikels" und den "Texttext" in der CSV-Datei. Sie können damit überprüfen, ob das erfasste Bild und das Bild auf der Seite, wenn Sie auf die URL klicken, dasselbe Produkt sind.

Das Bild wird übrigens so gespeichert. スクリーンショット 2020-05-22 0.23.19.png

Die CSV-Datei sieht übrigens so aus.

No URL text
1 https://〜 〇〇
2 https://〜 △△
3 https://〜 □□

Der Wert von No und der Wert von ○ .jpg sind gleich.

Da in der for-Anweisung und darunter der Hauptausführung dieselbe URL verwendet wird, ist die Kombination aus Text und Bild dasselbe Produkt.

Zusammenfassung

Ich habe zum ersten Mal versucht, Qiita zu posten, aber es ist ziemlich schwierig, es in Sätzen zu vermitteln. Ich habe es nicht genug gemeistert, um es perfekt zu erklären, daher denke ich, dass es schwierig ist, die Erklärung zu verstehen, aber bitte vergib mir. Wenn das Bild schwer zu finden ist, können Sie tatsächlich auf den Code verweisen und ihn mit print () überprüfen.

Recommended Posts

Ich habe versucht, mit Python Modebilder und Textsätze zu [kratzen].
Ich habe versucht, Web-Scraping mit Python und Selen
Ich habe versucht, mit Python zu kratzen
Ich habe versucht, mit Python zu kratzen
Ich habe versucht, WebScraping mit Python.
Extrahieren Sie mit Python Text aus Bildern
Ich habe versucht, den Chi-Quadrat-Test in Python und Java zu programmieren.
Ich habe eine Klasse in Python erstellt und versucht, Enten zu tippen
Lesen und Schreiben von Text in Python
Ich habe Line Benachrichtigung in Python versucht
Ich habe versucht, PLSA in Python zu implementieren
Ich habe versucht, Permutation in Python zu implementieren
Ich habe versucht, PLSA in Python 2 zu implementieren
Ich habe versucht, die Bayes'sche Optimierung von Python zu verwenden
Ich habe versucht, ADALINE in Python zu implementieren
Ich habe versucht, PPO in Python zu implementieren
Ich habe versucht, Yahoo Wetter zu kratzen (Python Edition)
Lesen von Zeichen in Bildern mit Python OCR
Ich habe versucht zu kratzen
Ich habe versucht, Objekte mit Python und OpenCV zu erkennen
Ich habe versucht, mit Python ein Tippspiel zu spielen
Ich habe versucht, "Birthday Paradox" mit Python zu simulieren
Ich habe die Methode der kleinsten Quadrate in Python ausprobiert
Ich habe eine Klasse in Python3 und Java geschrieben
Ich habe Jacobian und teilweise Differenzierung mit Python versucht
Ich habe Funktionssynthese und Curry mit Python versucht
Ich habe versucht, TOPIC MODEL in Python zu implementieren
Ich habe versucht, das Verhalten von E / A-Eventlets in Python nicht zu blockieren
Ich habe versucht, ein Python 3-Modul in C hinzuzufügen
Ich habe versucht, eine selektive Sortierung in Python zu implementieren
Clustertext in Python
Ich habe Python> autopep8 ausprobiert
Textverarbeitung mit Python
Ich habe Python> Decorator ausprobiert
Ich habe versucht, die in Python installierten Pakete grafisch darzustellen
Ich habe pipenv und asdf für die Python-Versionskontrolle ausprobiert
Ich habe versucht, Google Test und CMake in C zu verwenden
Ich habe versucht, TradeWave zu verwenden (BitCoin-Systemhandel in Python)
Ich habe versucht, einen Pseudo-Pachislot in Python zu implementieren
Ich habe versucht, Drakues Poker in Python zu implementieren
Ich war süchtig danach, 2020 mit Selen (+ Python) zu kratzen
Ich habe versucht, GA (genetischer Algorithmus) in Python zu implementieren
Ich habe versucht zusammenzufassen, wie man Pandas von Python benutzt
Python: Ich habe es mit Lügner und Ehrlichkeit versucht
Python Open CV hat versucht, das Bild im Text anzuzeigen.
Ich habe versucht, das Bild mit Python + OpenCV "morphologisch zu konvertieren"
Ich habe mit Python verschiedene Dinge ausprobiert: Schaben (Beautiful Soup + Selenium + PhantomJS) und morphologische Analyse
Ich habe fp-Wachstum mit Python versucht
UTF8-Textverarbeitung mit Python
Ich habe Python auf Japanisch geschrieben
Base64-Codierung von Bildern in Python 3
Ich habe versucht, API list.csv mit Python aus swagger.yaml zu erstellen
Schaben mit Selen in Python
[Python] Scraping in AWS Lambda
Ich habe versucht, einen eindimensionalen Zellautomaten in Python zu implementieren
Schaben mit Chromedriver in Python
Ich habe einen Fehler in vim oder zsh in der Python 3.7-Serie