Home / Uncategorized / Robotukai: e-komercija

Robotukai: e-komercija

Sukurkime pavyzdį, kuriame robotukams padėtų surinkti duomenis apie produktus, kainas e-komercijos portale.

Šiame pavyzdyje pritaikymas yra ieškoti kriterijus atitinkančių naujų prekių “Humanos” elektrininėje parduotuvėje: https://lt.think2.eu/true-vintage?page=2. Prekių katalogas atrodo taip:

Humana elektroninės parduotuvės prekių katalogas

Kaip visuomet, pavyzdyje naudosime išsaugotą nekintančią puslapio kopiją.

Pirmiausia aprašykime kiekvienos produkto kortelės struktūrą reguliariuoju reiškiniu. Mus domina šie laukai: produkto pavadinimas, unikalus identifikatorius (atpažinti naujiems produktams), kategorija, kaina:

HTML struktūra
r = re.compile('<div class="product-description">\s+<div class="product-category-name text-muted">(.*?)</div>\s+<h2 class="h3 product-title">\s+<a href="(.*?)">(.*?)</a>\s+</h2>\s+<div class="product-reference text-muted"> <a href=".*?">(.*?)</a></div>\s+<div class="product-price-and-shipping">\s+<a href=".*?"> <span class="product-price" content=".*?">(.*?)</span></a>')

Tuomet einame per šio reiškinio paieškos rezultatus ir dėliojamus struktūriškai produktų sąrašą:

results = r.findall(req.content.decode('utf-8'))

items = []
for category, www, product, product_id, price in results:
  items.append({
    'category': category,
    'www': www,
    'product': product,
    'id': product_id,
    'price': price,
  })

Rezultatai gaunami tokiu formatu:

 [{
  'category': 'Mini', 
  'url': 'https://lt.think2.eu/moteriski-drabuziai-sukneles-mini/vintage-women-s-dress-h0018459',
  'product': 'Vintažinė moteriška suknelė',
  'id': 'H0018459', 
  'price': '€19.00',
  },
  ..
]

Pastebime, kad visų struktūros laukelių reikšmės šiuo metu yra teksto eilutės. Visgi kainos stulpelį norėtume suprasti kaip realųjį skaičių, t.y. 19.00. Tam galime arba patys rašyti konvertavimo funkciją, arba pasinaudoti standartinėmis platformos priemonėmis.

transform_data = {
  'email': 'tavo@email.com',
  'data': json.dumps(results),
  'schema': json.dumps(['category', 'www', 'product', 'id', 'price']),
}
tranform_response = requests.post('http://www.citynow.org/api/transform', data=transform_data).json()
transform_results = tranform_response.get('results')

Dabar rezultatai gaunami reikiamu formatu:

[{
  'category': 'Midi', 
  'www': 'https://lt.think2.eu/moteriski-drabuziai-sukneles-midi/racell-women-s-dress-h0018246', 
  'price': 17.0, 
  'product': 'Racell moteriška suknelė',
  'id': 'h0018246',
 },
 ..
] 

Pilnas interaktyvus pavyzdys:

Leave a Reply

Your email address will not be published. Required fields are marked *