Home > database >  How to extract Json with scrapy
How to extract Json with scrapy

Time:06-14

I have problem with scraping target site, example. https://www.trendyol.com/camasir-yikama-urunleri-x-c103809

my script:

def parse(self, response):
    soup = BeautifulSoup(response.text, 'lxml')
    data = [json.loads(m.group(1)) for m in re.finditer(r"(?<=\=)(.*?)(?=\};)", response.text)]
    
    
    for elem in data['product']['variants']:
        print(elem['name'])

And target json data example is:

window.__SEARCH_APP_INITIAL_STATE__={"slpName":"","products":[{"id":76179753,"name":"Renk Ayırıcı Mendil Çamaşır Makinesi Için 50'li","images":["/ty166/product/media/images/20210828/22/123579644/130296764/1/1_org_zoom.jpg"],"imageAlt":"DOMOL Renk Ayırıcı Mendil Çamaşır Makinesi Için 50'li","brand":{"id":110099,"name":"Domol"},"tax":18,"businessUnit":"Ev Bakım ve Temizlik","ratingScore":{"averageRating":4.766536964980545,"totalCount":5140},"showSexualContent":true,"productGroupId":65110387,"hasReviewPhoto":true,"cardType":"PRODUCT","sections":[{"id":"12"},{"id":"16"},{"id":"1"},{"id":"2"}],"variants":[{"attributeValue":"Tek Ebat","attributeName":"beden","price":{"discountedPrice":54.5,"buyingPrice":0,"originalPrice":54.5,"sellingPrice":54.5},"listingId":"660413b49cdf25530a31d3666dfaae1a","campaignId":602622,"merchantId":179281,"discountedPriceInfo":"","hasCollectableCoupon":true}],"categoryHierarchy":"Renk Koruyucu Mendil/Çamaşır Yan Ürün/Süpermarket/Ev Bakım ve Temizlik/Çamaşır Yıkama","categoryId":2357,"categoryName":"Renk Koruyucu Mendil","url":"/domol/renk-ayirici-mendil-camasir-makinesi-icin-50-li-p-76179753","merchantId":179281,"campaignId":602622,"price":

How can I scrape

Product Name, Price, id, Url

from this json data?

Thank you.

CodePudding user response:

Try:

import re
import json
import requests

url = "https://www.trendyol.com/camasir-yikama-urunleri-x-c103809"

html_doc = requests.get(url).text

data = re.search(r"__SEARCH_APP_INITIAL_STATE__=(.*?});", html_doc)
data = json.loads(data.group(1))

# uncomment to print all data
# print(json.dumps(data, indent=4))

for p in data["products"]:
    name = p["name"]
    id_ = p["id"]
    price = p["price"]["sellingPrice"]
    u = p["url"]
    print("{:<10} {:<50} {:<10} {}".format(id_, name[:49], price, u[:60]))

Prints:

76179753   Renk Ayırıcı Mendil Çamaşır Makinesi Için 50'li    54.5       /domol/renk-ayirici-mendil-camasir-makinesi-icin-50-li-p-761
51325448   Extra Lilyum Konsantre Çamaşır Yumuşatıcı 1440 ml  145        /yumos/extra-lilyum-konsantre-camasir-yumusatici-1440-ml-60-
80810486   Hassas Bakım Sıvı Çamaşır Deterjanı (195 Yıkama)   224.9      /perwoll/hassas-bakim-sivi-camasir-deterjani-195-yikama-3x3l
42805612   Toz Dağ Esintısi Renklilere Özel 12 Kg             154.9      /ariel/toz-dag-esintisi-renklilere-ozel-12-kg-p-42805612
122436218  Mucizevi Oxi Leke Çıkarıcı Sprey 500 ml            48.55      /thepinkstuff/mucizevi-oxi-leke-cikarici-sprey-500-ml-p-1224
44477677   Kosla Multipower Çamaşır Leke Çıkarıcı ve Deterja  109.9      /vanish/kosla-multipower-camasir-leke-cikarici-ve-deterjan-g
7081372    Hassas Bakım Sıvı Çamaşır Deterjanı 3L (50 Yıkama  84.99      /perwoll/hassas-bakim-sivi-camasir-deterjani-3l-50-yikama-si
46827559   5kg Ultra Kıvamlı Çamaşır Suyu                     49.9       /by-cleaner/5kg-ultra-kivamli-camasir-suyu-p-46827559
6737392    Çamaşır Suyu Dağ Esintisi 750 ml 6'lı Paket        86.08      /domestos/camasir-suyu-dag-esintisi-750-ml-6-li-paket-p-6737
151474451  Multipower Toz 400grx2 Pembe   Beyaz               74.9       /vanish/multipower-toz-400grx2-pembe-beyaz-p-151474451
35231936   Leke Çıkarıcı Sprey Yıkama Öncesi Oxi Güç 750ml    49.99      /domol/leke-cikarici-sprey-yikama-oncesi-oxi-guc-750ml-p-352
74471784   Sıvı Bakım Deterjanı Hassas Giysiler 2520 ML   Re  148.02     /yumos/sivi-bakim-deterjani-hassas-giysiler-2520-ml-renkli-g
6183586    Hassas Bakım Sıvı Çamaşır Deterjanı 4 X 1l(64 Yık  94.9       /perwoll/hassas-bakim-sivi-camasir-deterjani-4-x-1l-64-yikam
6183584    Hassas Bakım Sıvı Çamaşır Deterjanı 4 x 3L(200 Yı  224.9      /perwoll/hassas-bakim-sivi-camasir-deterjani-4-x-3l-200-yika
55774556   Leke Çıkarıcı Sprey Yıkama Öncesi Oxi Güç 750ml 1  49.99      /domol/leke-cikarici-sprey-yikama-oncesi-oxi-guc-750ml-1-ade
48753922   Çamaşır Aktif 1000ml                               60         /ersag/camasir-aktif-1000ml-p-48753922
158356713  Ultra Çamaşır Suyu 6'lı Paket                      84.9       /abc/ultra-camasir-suyu-6-li-paket-p-158356713
7081394    Yoğun Kıvamlı Çamaşır Suyu Dağ Esintisi 810 g      13.7       /domestos/yogun-kivamli-camasir-suyu-dag-esintisi-810-g-p-70
40812510   Expert Gülün Büyüsü 4 Kg                           57.9       /persil/expert-gulun-buyusu-4-kg-p-40812510
5776408    Matik Toz Çamaşır Deterjanı 9 kg Ekonomi Paketi 2  179        /bingo/matik-toz-camasir-deterjani-9-kg-ekonomi-paketi-2-li-
138671032  Renk Koruyucu Mendil 2 x 10'lu Paket   Yoğun Siya  49.9       /k2r/renk-koruyucu-mendil-2-x-10-lu-paket-yogun-siyahlik-10-
40979933   Çamaşır Beyazlatıcı Toz Tek Kullanımlık 50 G Sr12  13.9       /domol/camasir-beyazlatici-toz-tek-kullanimlik-50-g-sr120609
2092497    Renk Koruyucu Mendil 6 x 10'lu Paket (60 Yıkama)   82.9       /k2r/renk-koruyucu-mendil-6-x-10-lu-paket-60-yikama-p-209249
138671118  Max Konsantre Çamaşır Yumuşatıcısı 2x1440ml Şakay  124.9      /vernel/max-konsantre-camasir-yumusaticisi-2x1440ml-sakayik-
  • Related