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