2017-11-30 12 views
1

Ich versuche, alle Kategorien und Unterkategorien innerhalb einer Einzelhandels-Website zu erhalten. Ich bin in der Lage, BeautifulSoup zu verwenden, um jedes einzelne Produkt in der Kategorie zu ziehen, sobald ich darin bin. Ich bin jedoch mit der Schleife für Kategorien schwer. Ich benutze dies als Test-Website https://www.uniqlo.com/us/en/womenPython Web Scraping - Schleife durch alle Kategorien und Unterkategorien

Wie durchschlinge ich jede Kategorie sowie die Unterkategorien auf der linken Seite der Website? Das Problem ist, dass Sie auf die Kategorie klicken müssen, bevor die Website alle Unterkategorien anzeigt. Ich möchte alle Produkte innerhalb der Kategorie/Unterkategorie in eine CSV-Datei extrahieren. Das habe ich bisher:

import bs4 
import json 
from urllib.request import urlopen as uReq 
from bs4 import BeautifulSoup as soup 

myurl = 'https://www.uniqlo.com/us/en/women/' 
uClient = uReq(myurl) 
page_html = uClient.read() 
uClient.close() 
page_soup = soup(page_html,"html.parser") 
filename = "products.csv" 
file = open(filename,"w",newline='') 
product_list = [] 

containers = page_soup.findAll("li",{"class" : lambda L: L and 
L.startswith('grid-tile')}) #Find all li with class: grid-tile 

for container in containers: 

product_container = container.findAll("div",{"class":"product-swatches"}) 
product_names = product_container[0].findAll("li") 

    for i in range(len(product_names)): 

    try: 
     product_name = product_names[i].a.img.get("alt") 
     product_mod_name = product_name.split(',')[0].lstrip() 
     print(product_mod_name) 
    except: 
     product_name = '' 

    i +=1  

product = [product_mod_name] 
print(product)  
product_list.append(product) 

import csv 

with open('products.csv','a',newline='') as file:   
    writer=csv.writer(file) 
    for row in product_list: 
     writer.writerow(row) 

Antwort

0

Sie können dieses Skript ausprobieren. Es wird verschiedene Kategorien und Unterkategorien von Produkten durchlaufen und deren Titel und Preis analysieren. Es gibt mehrere Produkte mit gleichen Namen und der einzige Unterschied zwischen ihnen sind Farben. Also zählen Sie sie nicht als Duplikat. Ich habe das Skript in einer sehr kompakten Weise geschrieben es so strecken, wie pro Ihre Bequemlichkeit:

import requests 
from bs4 import BeautifulSoup 

res = requests.get('https://www.uniqlo.com/us/en/women') 
soup = BeautifulSoup(res.text, "lxml") 

for items in soup.select("#category-level-1 .refinement-link"): 
    page = requests.get(items['href']) 
    broth = BeautifulSoup(page.text,"lxml") 

    for links in broth.select("#category-level-2 .refinement-link"): 
     req = requests.get(links['href']) 
     sauce = BeautifulSoup(req.text,"lxml") 

     for data in sauce.select(".product-tile-info"): 
      title = data.select(".name-link")[0].text 
      price = ' '.join([item.text for item in data.select(".product-pricing span")]) 
      print(title.strip(),price.strip()) 

Ergebnisse sind wie:

WOMEN CASHMERE CREW NECK SWEATER $79.90 
Women Extra Fine Merino Crew Neck Sweater $29.90 $19.90 
WOMEN KAWS X PEANUTS LONG-SLEEVE HOODED SWEATSHIRT $19.90 
+0

Dank !! Ich habe 2 Wochen damit verbracht und konnte immer noch nicht herausfinden. Lass mich das jetzt versuchen. – Futochan

+0

Wenn es tut, was es für sie bedeutet, stellen Sie sicher, es als eine Antwort zu akzeptieren. Vielen Dank. – SIM

Verwandte Themen