2017-11-30 7 views
1

私は小売ウェブサイト内のすべてのカテゴリとサブカテゴリを取得しようとしています。私はBeautifulSoupを使用して、一度そのカテゴリーに属するすべての製品を引き出すことができます。しかし、私はカテゴリのループに苦しんでいます。私はこれをテストウェブサイトとして使用していますhttps://www.uniqlo.com/us/en/womenPython web scraping - すべてのカテゴリとサブカテゴリをループします

ウェブサイトの左側にある各カテゴリとサブカテゴリをどのようにループするのですか?問題は、ウェブサイトがすべてのサブカテゴリを表示する前にカテゴリをクリックしなければならないことです。カテゴリ/サブカテゴリ内のすべての製品をcsvファイルに展開したいと思います。これは私がこれまで持っているものです。

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) 

答えて

0

あなたは、このスクリプトを試すことができます。製品のさまざまなカテゴリとサブカテゴリを調べ、タイトルと価格を解析します。同じ名前の商品がいくつかありますが、その違いは色だけです。だから、重複として数えないでください。私はあなたの快適ごとにそれを伸ばす非常にコンパクトにスクリプトを書いた:

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

結果は似ています:

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

感謝!!私はこれに2週間を費やして、まだ理解できませんでした。私は今これを試してみましょう。 – Futochan

+0

もしそれが彼らに想定されていることをしたら、答えとしてそれを受け入れるようにしてください。ありがとう。 – SIM

関連する問題