Home > front end >  how to get the json response for a product url
how to get the json response for a product url

Time:12-10

I am trying to scrape product information from https://www.walmart.com/. I am trying to do it in two stages.

  1. Get search result products for a word
  2. Get each product data by going to the product url.
import requests
import json
data= {
   
   "query":"query Browse( $query:String $page:Int $prg:Prg! $facet:String $sort:Sort $catId:String! $max_price:String $min_price:String $module_search:String $affinityOverride:AffinityOverride $ps:Int $ptss:String $beShelfId:String $fitmentFieldParams:JSON ={}$fitmentSearchParams:JSON ={}$rawFacet:String $seoPath:String $trsp:String $fetchMarquee:Boolean! $fetchSkyline:Boolean! $additionalQueryParams:JSON ={}){search( query:$query page:$page prg:$prg facet:$facet sort:$sort cat_id:$catId max_price:$max_price min_price:$min_price module_search:$module_search affinityOverride:$affinityOverride additionalQueryParams:$additionalQueryParams ps:$ps ptss:$ptss trsp:$trsp _be_shelf_id:$beShelfId ){query searchResult{...BrowseResultFragment}}contentLayout( channel:\"WWW\" pageType:\"BrowsePage\" tenant:\"WM_GLASS\" version:\"v1\" searchArgs:{query:$query cat_id:$catId _be_shelf_id:$beShelfId prg:$prg}){modules{...ModuleFragment configs{...on EnricherModuleConfigsV1{zoneV1}__typename...on _TempoWM_GLASSWWWSearchSortFilterModuleConfigs{facetsV1{...FacetFragment}}...on TempoWM_GLASSWWWPillsModuleConfigs{moduleSource pillsV2{...PillsModuleFragment}}...on TempoWM_GLASSWWWSearchFitmentModuleConfigs{fitments( fitmentSearchParams:$fitmentSearchParams fitmentFieldParams:$fitmentFieldParams ){...FitmentFragment sisFitmentResponse{...BrowseResultFragment}}}...on TempoWM_GLASSWWWStoreSelectionHeaderConfigs{fulfillmentMethodLabel storeDislayName}...on TempoWM_GLASSWWWBreadcrumbConfigs{_rawConfigs}...on TempoWM_GLASSWWWSponsoredProductCarouselConfigs{_rawConfigs}...PopularInModuleFragment...CopyBlockModuleFragment...BannerModuleFragment...HeroPOVModuleFragment...InlineSearchModuleFragment...MarqueeDisplayAdConfigsFragment @include(if:$fetchMarquee)...SkylineDisplayAdConfigsFragment @include(if:$fetchSkyline)...HorizontalChipModuleConfigsFragment}}...LayoutFragment pageMetadata{location{postalCode stateOrProvinceCode city storeId}pageContext}}seoBrowseMetaData( id:$catId facets:$rawFacet path:$seoPath facet_query_param:$facet _be_shelf_id:$beShelfId ){metaTitle metaDesc metaCanon h1}}fragment BrowseResultFragment on SearchInterface{title aggregatedCount...BreadCrumbFragment...DebugFragment...ItemStacksFragment...PageMetaDataFragment...PaginationFragment...RequestContextFragment...ErrorResponse modules{facetsV1{...FacetFragment}pills{...PillsModuleFragment}}}fragment ModuleFragment on TempoModule{name version type moduleId schedule{priority}matchedTrigger{zone}}fragment LayoutFragment on ContentLayout{layouts{id layout}}fragment BreadCrumbFragment on SearchInterface{breadCrumb{id name url}}fragment DebugFragment on SearchInterface{debug{sisUrl}}fragment ItemStacksFragment on SearchInterface{itemStacks{displayMessage meta{adsBeacon{adUuid moduleInfo max_ads}query stackId stackType title layoutEnum totalItemCount totalItemCountDisplay viewAllParams{query cat_id sort facet affinityOverride recall_set min_price max_price}}itemsV2{...ItemFragment...InGridMarqueeAdFragment}}}fragment ItemFragment on Product{__typename id usItemId fitmentLabel name checkStoreAvailabilityATC seeShippingEligibility brand type shortDescription imageInfo{...ProductImageInfoFragment}canonicalUrl externalInfo{url}category{path{name url}}badges{flags{...on BaseBadge{key text type id}}tags{...on BaseBadge{key text type}}}classType averageRating numberOfReviews esrb mediaRating salesUnitType sellerId sellerName hasSellerBadge availabilityStatusV2{display value}productLocation{displayValue aisle{zone aisle}}badge{type dynamicDisplayName}fulfillmentSpeed offerId preOrder{...PreorderFragment}priceInfo{...ProductPriceInfoFragment}variantCriteria{...VariantCriteriaFragment}fulfillmentBadge fulfillmentTitle fulfillmentType brand manufacturerName showAtc sponsoredProduct{spQs clickBeacon spTags}showOptions}fragment ProductImageInfoFragment on ProductImageInfo{thumbnailUrl}fragment ProductPriceInfoFragment on ProductPriceInfo{priceRange{minPrice maxPrice}currentPrice{...ProductPriceFragment}wasPrice{...ProductPriceFragment}unitPrice{...ProductPriceFragment}listPrice{...ProductPriceFragment}shipPrice{...ProductPriceFragment}subscriptionPrice{priceString subscriptionString}priceDisplayCodes{priceDisplayCondition finalCostByWeight}}fragment PreorderFragment on PreOrder{isPreOrder preOrderMessage preOrderStreetDateMessage}fragment ProductPriceFragment on ProductPrice{price priceString}fragment VariantCriteriaFragment on VariantCriterion{name type id isVariantTypeSwatch variantList{id images name rank swatchImageUrl availabilityStatus products selectedProduct{canonicalUrl usItemId}}}fragment InGridMarqueeAdFragment on MarqueePlaceholder{__typename type moduleLocation lazy}fragment PageMetaDataFragment on SearchInterface{pageMetadata{storeSelectionHeader{fulfillmentMethodLabel storeDislayName}title canonical description location{addressId}}}fragment PaginationFragment on SearchInterface{paginationV2{maxPage pageProperties}}fragment RequestContextFragment on SearchInterface{requestContext{vertical isFitmentFilterQueryApplied searchMatchType categories{id name}}}fragment ErrorResponse on SearchInterface{errorResponse{correlationId source errors{errorType statusCode statusMsg source}}}fragment PillsModuleFragment on PillsSearchInterface{title url image:imageV1{src alt}baseSeoURL}fragment BannerModuleFragment on TempoWM_GLASSWWWSearchBannerConfigs{moduleType viewConfig{title image imageAlt displayName description url urlAlt appStoreLink appStoreLinkAlt playStoreLink playStoreLinkAlt}}fragment PopularInModuleFragment on TempoWM_GLASSWWWPopularInBrowseConfigs{seoBrowseRelmData(id:$catId){relm{id name url}}}fragment CopyBlockModuleFragment on TempoWM_GLASSWWWCopyBlockConfigs{copyBlock(id:$catId){cwc}}fragment FacetFragment on Facet{name type layout min max selectedMin selectedMax unboundedMax stepSize values{id name description type itemCount isSelected baseSeoURL}}fragment FitmentFragment on Fitments{partTypeIDs result{status formId position quantityTitle extendedAttributes{...FitmentFieldFragment}labels{...LabelFragment}resultSubTitle}labels{...LabelFragment}savedVehicle{vehicleYear{...VehicleFieldFragment}vehicleMake{...VehicleFieldFragment}vehicleModel{...VehicleFieldFragment}additionalAttributes{...VehicleFieldFragment}}fitmentFields{...VehicleFieldFragment}fitmentForms{id fields{...FitmentFieldFragment}title labels{...LabelFragment}}}fragment LabelFragment on FitmentLabels{ctas{...FitmentLabelEntityFragment}messages{...FitmentLabelEntityFragment}links{...FitmentLabelEntityFragment}images{...FitmentLabelEntityFragment}}fragment FitmentLabelEntityFragment on FitmentLabelEntity{id label}fragment VehicleFieldFragment on FitmentVehicleField{id label value}fragment FitmentFieldFragment on FitmentField{id displayName value extended data{value label}dependsOn}fragment HeroPOVModuleFragment on TempoWM_GLASSWWWHeroPovConfigsV1{povCards{card{povStyle image{mobileImage{...TempoCommonImageFragment}desktopImage{...TempoCommonImageFragment}}heading{text textColor textSize}subheading{text textColor}detailsView{backgroundColor isTransparent}ctaButton{button{linkText clickThrough{value}}}logo{...TempoCommonImageFragment}links{link{linkText}}}}}fragment TempoCommonImageFragment on TempoCommonImage{src alt assetId uid clickThrough{value}}fragment InlineSearchModuleFragment on TempoWM_GLASSWWWInlineSearchConfigs{headingText placeholderText}fragment MarqueeDisplayAdConfigsFragment on TempoWM_GLASSWWWMarqueeDisplayAdConfigs{_rawConfigs ad{...DisplayAdFragment}}fragment DisplayAdFragment on Ad{...AdFragment adContent{type data{__typename...AdDataDisplayAdFragment}}}fragment AdFragment on Ad{status moduleType platform pageId pageType storeId stateCode zipCode pageContext moduleConfigs adsContext adRequestComposite}fragment AdDataDisplayAdFragment on AdData{...on DisplayAd{json status}}fragment SkylineDisplayAdConfigsFragment on TempoWM_GLASSWWWSkylineDisplayAdConfigs{_rawConfigs ad{...SkylineDisplayAdFragment}}fragment SkylineDisplayAdFragment on Ad{...SkylineAdFragment adContent{type data{__typename...SkylineAdDataDisplayAdFragment}}}fragment SkylineAdFragment on Ad{status moduleType platform pageId pageType storeId stateCode zipCode pageContext moduleConfigs adsContext adRequestComposite}fragment SkylineAdDataDisplayAdFragment on AdData{...on DisplayAd{json status}}fragment HorizontalChipModuleConfigsFragment on TempoWM_GLASSWWWHorizontalChipModuleConfigs{chipModuleSource:moduleSource chipModule{title url{linkText title clickThrough{type value}}}chipModuleWithImages{title url{linkText title clickThrough{type value}}image{alt clickThrough{type value}height src title width}}}",
   "variables":{
      "id":"",
      "affinityOverride":"default",
      "dealsId":"",
      "query":"",
      "page":1,
      "prg":"desktop",
      "catId":"3920",
      "facet":"",
      "sort":"best_seller",
      "rawFacet":"",
      "seoPath":"",
      "ps":40,
      "ptss":"",
      "trsp":"",
      "beShelfId":"",
      "recall_set":"",
      "module_search":"",
      "min_price":"",
      "max_price":"",
      "storeSlotBooked":"",
      "additionalQueryParams":None,
      "fitmentFieldParams":None,
      "fitmentSearchParams":{
         "id":"",
         "affinityOverride":"default",
         "dealsId":"",
         "query":"",
         "page":1,
         "prg":"desktop",
         "catId":"3920",
         "facet":"",
         "sort":"best_seller",
         "rawFacet":"",
         "seoPath":"",
         "ps":40,
         "ptss":"",
         "trsp":"",
         "beShelfId":"",
         "recall_set":"",
         "module_search":"",
         "min_price":"",
         "max_price":"",
         "storeSlotBooked":"",
         "additionalQueryParams":None,
         "cat_id":"3920",
         "_be_shelf_id":""
      },
      "fetchMarquee":True,
      "fetchSkyline":True,
      "fetchSbaTop":False
   }

}
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36',
    'content-type':'application/json',
    'wm_mp': 'true',
    'wm_page_url': 'https://www.walmart.com/browse/books/3920?sort=best_seller&affinityOverride=default',
    'wm_qos.correlation_id': 'FWpup9KEKUrLFOY68gppqfprABL16K6qE76g',
    'x-apollo-operation-name': 'Browse',
    'x-enable-server-timing': '1',
    'x-latency-trace': '1',
    'x-o-ccm': 'server',
    'x-o-correlation-id': 'FWpup9KEKUrLFOY68gppqfprABL16K6qE76g',
    'x-o-gql-query': 'query Browse',
    'x-o-market': 'us',
    'x-o-platform': 'rweb',
    'x-o-platform-version': 'main-176-e8acb5',
    'x-o-segment': 'oaoh'
    }


params= {

  "affinityOverride": "default",
    "page": "1",
    "prg": "desktop",
    "catId": "3920",
    "sort": "best_seller",
    "ps": "40",
    "fetchMarquee": "true",
    "fetchSkyline": "true",
    "fetchSbaTop": "false"}





for i in range(1,25,1):
    params['maxPage']=i
    api_url='https://www.walmart.com/orchestra/home/graphql/browse'
    resp = requests.post(api_url, data=json.dumps(data), headers=headers,params=params)
    r=resp.json()
    print(r)
    # items = r['data']['search']['searchResult']['itemStacks'][0]['itemsV2']
    # for item in items:
    #     price = item['priceInfo']['currentPrice']['price']
    #     print(price)



the code above produce a json that includes the product url like below

{   
...
'canonicalUrl': '/ip/Rainbow-Watercolors-Gift-Wrapping-Papers-6-Sheets-High-Quality-24-X-18-Inch-Wrapping-Paper-Paperback/192742217?athbdg=L1600',
...
}

so the producturl is

https://www.walmart.com/   canonicalUrl

How can I get the json response for the product url (i.e. includes product description and all the thumbnail pics) by modifying the code above

CodePudding user response:

As stated you should use an HTML parser like Beautiful Soup. You need to select each part of the page you want to record.

Here is an example which picks out the product name from the HTML. Note I had to look at the HTML and determine that <h1 itemprop="name" ...> contained the desired :

import requests
from bs4 import BeautifulSoup

url = "https://www.walmart.com/ip/Pelonis-1500W-3-Speed-Electric-Fan-Forced-Space-Heater-PSH08F1ABB-Black/795905622?athbdg=L1600"

html_doc = requests.get(url).text
soup = BeautifulSoup(html_doc, 'html.parser')
product_data = {}

product_data["product_name"] = None
for h1 in soup.find_all("h1"):
    print(h1)
    if h1.get("itemprop") == "name":
        product_data["product_name"] = h1.string
else:
    print("product name not found")

HOWEVER it seems like walmart doesn't want people crawling their page.

CodePudding user response:

Note Be aware that this thoughts won't be bulletproofed and respect the website with its terms and conditions

Imported also time for some delay and scrape in a more or less gentle way:

import json, requests, time

... your data and params (demo --> "query":"rainbow")

Starting from position of your for loop, just prepended baseUrl to concat with canonicalUrl and results to keep the scraped results:

baseUrl = 'https://www.walmart.com/'
results = []

# limited to 1 page for demo, change if you like
for i in range(1,2):
    params['maxPage']=i
    api_url='https://www.walmart.com/orchestra/home/graphql/search'
    
    resp = requests.post(api_url, data=json.dumps(data), headers=headers,params=params)
    r=resp.json()

    items = r['data']['search']['searchResult']['itemStacks'][0]['itemsV2']

Limited to a slice of [:5] results for demo, pop if you want all results:

    for item in items[:5]:
        res = requests.get(f'{baseUrl}{item["canonicalUrl"]}',headers=headers)
        html = BeautifulSoup(res.content,"html.parser")

Extracting the json as text from html by selecting the first script with attribute type equals "application/ld json" and load(s) it with json.loads():

        jsonData = json.loads(html.select_one('script[type="application/ld json"]').text)

Scraping the image urls from html and appending them to jsonData, cause they are not included in original json, just the main image:

        jsonData['imagesFullsize']=[i['src'].split('?')[0] for i in html.select('button > img')]
        jsonData['imagesThumbnail']=[i['src'] for i in html.select('button > img')]

Appending whole jsonData to the result list outside the for loop:

        results.append(jsonData)
        # some delay to be gentle
        time.sleep(5)

results

Output

[{'@context': 'https://schema.org', '@type': 'Product', 'image': 'https://i5.walmartimages.com/asr/212f685a-9884-4c06-ad80-436e7caa336b.a27cb29af1e6bd338936924c3174eb60.jpeg', 'name': 'Rainbow Fish: The Rainbow Fish (Board book)', 'sku': '549445', 'gtin13': None, 'description': "<p>This board book edition features the same eye-catching holographic foil stamping that helped make the original so popular. In a simple and appealing way, the brief text conveys the story's universal message about sharing, and the smaller, sturdy format is just right for the toddler set. Full-color.The award-winning book about a beautiful fish who finds friendship and happiness when he learns to share is now available in a board book edition for the youngest child.</p>", 'model': None, 'brand': {'@type': 'Thing', 'name': 'Marcus Pfister'}, 'aggregateRating': {'@type': 'AggregateRating', 'ratingValue': 4.4, 'bestRating': 5, 'reviewCount': 181}, 'offers': {'@type': 'Offer', 'url': 'https://www.walmart.com/ip/Rainbow-Fish-The-Rainbow-Fish-Board-book-9781558585362/549445', 'priceCurrency': 'USD', 'price': 5.94, 'availability': 'https://schema.org/InStock', 'itemCondition': 'https://schema.org/NewCondition', 'availableDeliveryMethod': 'https://schema.org/OnSitePickup'}, 'review': [{'@type': 'Review', 'name': 'cute book for little kids', 'datePublished': 'June 12, 2021', 'reviewBody': 'we love the graphics and glittery scales on the fish.  the story is learning to share. it was cute and my daughter enjoyed it.', 'reviewRating': {'@type': 'Rating', 'worstRating': 1, 'ratingValue': 5, 'bestRating': 5}, 'author': {'@type': 'Thing', 'name': 'DIAMOND'}}, {'@type': 'Review', 'name': 'The Rainbow Fish', 'datePublished': 'November 20, 2013', 'reviewBody': 'Great story with a great message. My son bought this book for his much younger cousin because he loved this book when he was her age.', 'reviewRating': {'@type': 'Rating', 'worstRating': 1, 'ratingValue': 5, 'bestRating': 5}, 'author': {'@type': 'Thing', 'name': 'MyThree3Sons'}}, {'@type': 'Review', 'name': 'Great book!', 'datePublished': 'November 1, 2020', 'reviewBody': 'We love books!! Especially when they are quality books. This board book is great, and the pictures are bright! My little one loves it so much and I love the price! If you have little ones they will definitely enjoy this book!', 'reviewRating': {'@type': 'Rating', 'worstRating': 1, 'ratingValue': 5, 'bestRating': 5}, 'author': {'@type': 'Thing', 'name': 'AM01'}}, {'@type': 'Review', 'name': None, 'datePublished': 'July 5, 2021', 'reviewBody': 'Just right for a toddlers hands.', 'reviewRating': {'@type': 'Rating', 'worstRating': 1, 'ratingValue': 5, 'bestRating': 5}, 'author': {'@type': 'Thing', 'name': 'Mickey'}}, {'@type': 'Review', 'name': 'Rainbow Fish shimmering scales', 'datePublished': 'June 22, 2021', 'reviewBody': 'Excellent toddler book with beautiful illustrations of shiny scales.', 'reviewRating': {'@type': 'Rating', 'worstRating': 1, 'ratingValue': 5, 'bestRating': 5}, 'author': {'@type': 'Thing', 'name': 'missy'}}, {'@type': 'Review', 'name': 'Rainbow Fish Book', 'datePublished': 'March 5, 2014', 'reviewBody': "One of my favorite children's books!!", 'reviewRating': {'@type': 'Rating', 'worstRating': 1, 'ratingValue': 5, 'bestRating': 5}, 'author': {'@type': 'Thing', 'name': 'Steere'}}, {'@type': 'Review', 'name': 'Rainbow fish', 'datePublished': 'January 16, 2021', 'reviewBody': 'Classic rainbow fish book love it', 'reviewRating': {'@type': 'Rating', 'worstRating': 1, 'ratingValue': 5, 'bestRating': 5}, 'author': {'@type': 'Thing', 'name': 'kim'}}, {'@type': 'Review', 'name': 'pocket sized.', 'datePublished': 'March 18, 2021', 'reviewBody': "kinda small for a board book. it's literally pocket sized.", 'reviewRating': {'@type': 'Rating', 'worstRating': 1, 'ratingValue': 4, 'bestRating': 5}, 'author': {'@type': 'Thing', 'name': 'Cate'}}, {'@type': 'Review', 'name': 'Terrible Lesson', 'datePublished': 'February 4, 2021', 'reviewBody': 'I dont like this book.  What are we trying to teach our kids?  That if they make themselves less beautiful, people will like them?  That if someone admires their shirt or shoes, they should give it to them?  Or worse yet, locks of their hair?  That we need to buy friendship?  That having friends is more important than anything else, including self-worth?  Whatever happened to liking someone just the way they are?', 'reviewRating': {'@type': 'Rating', 'worstRating': 1, 'ratingValue': 2, 'bestRating': 5}, 'author': {'@type': 'Thing', 'name': 'Patricia'}}, {'@type': 'Review', 'name': 'Skip this one!', 'datePublished': 'March 23, 2021', 'reviewBody': 'Not a great message for kids.  Give away your shiny scales and then you will have friends.  I would call those false friends.  Grandma says no to this one.', 'reviewRating': {'@type': 'Rating', 'worstRating': 1, 'ratingValue': 1, 'bestRating': 5}, 'author': {'@type': 'Thing', 'name': 'Mary'}}], 'imagesFullsize': ['https://i5.walmartimages.com/asr/212f685a-9884-4c06-ad80-436e7caa336b.a27cb29af1e6bd338936924c3174eb60.jpeg', 'https://i5.walmartimages.com/asr/84251155-1e3c-4d2b-8c49-a012007aa77b_1.82df42bd1a795bde9359aeecdab3396b.jpeg'], 'imagesThumbnail': ['https://i5.walmartimages.com/asr/212f685a-9884-4c06-ad80-436e7caa336b.a27cb29af1e6bd338936924c3174eb60.jpeg?odnHeight=80&odnWidth=80&odnBg=FFFFFF', 'https://i5.walmartimages.com/asr/84251155-1e3c-4d2b-8c49-a012007aa77b_1.82df42bd1a795bde9359aeecdab3396b.jpeg?odnHeight=80&odnWidth=80&odnBg=FFFFFF']}, {'@context': 'https://schema.org', '@type': 'Product', 'image': 'https://i5.walmartimages.com/asr/e138cc0a-bc01-4bec-b92f-a38e2ba43059.33994c2503fb3885845815d10114cae1.jpeg', 'name': 'Origami Paper 200 Sheets Rainbow Colors 6" (15 CM) : Tuttle Origami Paper: High-Quality Origami Sheets Printed with 12 Different Colors: Instructions for 8 Projects Included', 'sku': '55746570', 'gtin13': None, 'description': '<b>This origami pack contains 200 high-quality origami sheets printed with colorful and bright rainbow colors.</b> <p>The rainbow papers were chosen to enhance the creative work of origami artists and paper crafters. The pack contains 12 different colors unique to this pack, and all of the papers are printed in coordinating colors on the reverse to provide aesthetically pleasing combinations in origami models that show both the front and back of the papers. </p><p><b>This origami paper pack includes: </b> </p><ul><li> 200 sheets of high-quality origami paper</li><li> Vibrant and bright colors</li><li> Double-sided color</li><li>6 x 6 inch (15 cm) squares</li><li> Instructions for 8 easy original projects</li></ul>', 'model': None, 'brand': {'@type': 'Thing', 'name': 'Tuttle Publishing'}, 'aggregateRating': {'@type': 'AggregateRating', 'ratingValue': 4.5, 'bestRating': 5, 'reviewCount': 12}, 'offers': {'@type': 'Offer', 'url': 'https://www.walmart.com/ip/Origami-Paper-200-Sheets-Rainbow-Colors-6-15-CM-Tuttle-Paper-High-Quality-Printed-12-Different-Colors-Instructions-8-Projects-Included-9780804847186/55746570', 'priceCurrency': 'USD', 'price': 7.64, 'availability': 'https://schema.org/InStock', 'itemCondition': 'https://schema.org/NewCondition', 'availableDeliveryMethod': 'https://schema.org/OnSitePickup'}, 'review': [{'@type': 'Review', 'name': None, 'datePublished': 'March 18, 2021', 'reviewBody': 'Delivered quickly.  Item is just as it was described', 'reviewRating': {'@type': 'Rating', 'worstRating': 1, 'ratingValue': 5, 'bestRating': 5}, 'author': {'@type': 'Thing', 'name': 'Donna'}}, {'@type': 'Review', 'name': None, 'datePublished': 'May 7, 2020', 'reviewBody': "Beautiful paper. Delivered unbelievably fast. Worked perfect for my daughter's project.", 'reviewRating': {'@type': 'Rating', 'worstRating': 1, 'ratingValue': 5, 'bestRating': 5}, 'author': {'@type': 'Thing', 'name': 'Opel'}}, {'@type': 'Review', 'name': None, 'datePublished': 'April 19, 2020', 'reviewBody': 'Beautiful colors and the right amount of paper for what I pay for. My daughter love it!', 'reviewRating': {'@type': 'Rating', 'worstRating': 1, 'ratingValue': 5, 'bestRating': 5}, 'author': {'@type': 'Thing', 'name': 'Eimmy'}}, {'@type': 'Review', 'name': 'Paper for squares', 'datePublished': 'January 26, 2019', 'reviewBody': 'This paper is very colorful and easy to fold. Perfectly square.', 'reviewRating': {'@type': 'Rating', 'worstRating': 1, 'ratingValue': 5, 'bestRating': 5}, 'author': {'@type': 'Thing', 'name': 'CraneMan'}}, {'@type': 'Review', 'name': 'Great item', 'datePublished': 'May 13, 2020', 'reviewBody': 'Grandchildren loved the activity.', 'reviewRating': {'@type': 'Rating', 'worstRating': 1, 'ratingValue': 5, 'bestRating': 5}, 'author': {'@type': 'Thing', 'name': 'Shelley'}}, {'@type': 'Review', 'name': 'Good paper bad delivery', 'datePublished': 'October 13, 2021', 'reviewBody': 'I live in Apt. My package was not left at the door, nor in the mailbox!  But put it on the mailbox.', 'reviewRating': {'@type': 'Rating', 'worstRating': 1, 'ratingValue': 1, 'bestRating': 5}, 'author': {'@type': 'Thing', 'name': None}}, {'@type': 'Review', 'name': None, 'datePublished': 'February 18, 2021', 'reviewBody': None, 'reviewRating': {'@type': 'Rating', 'worstRating': 1, 'ratingValue': 5, 'bestRating': 5}, 'author': {'@type': 'Thing', 'name': 'Asheley'}}, {'@type': 'Review', 'name': None, 'datePublished': 'August 27, 2020', 'reviewBody': None, 'reviewRating': {'@type': 'Rating', 'worstRating': 1, 'ratingValue': 5, 'bestRating': 5}, 'author': {'@type': 'Thing', 'name': 'Ididnotorderedthis'}}, {'@type': 'Review', 'name': None, 'datePublished': 'September 14, 2020', 'reviewBody': None, 'reviewRating': {'@type': 'Rating', 'worstRating': 1, 'ratingValue': 5, 'bestRating': 5}, 'author': {'@type': 'Thing', 'name': 'David'}}, {'@type': 'Review', 'name': None, 'datePublished': 'October 22, 2020', 'reviewBody': None, 'reviewRating': {'@type': 'Rating', 'worstRating': 1, 'ratingValue': 5, 'bestRating': 5}, 'author': {'@type': 'Thing', 'name': 'leslie'}}], 'imagesFullsize': ['https://i5.walmartimages.com/asr/e138cc0a-bc01-4bec-b92f-a38e2ba43059.33994c2503fb3885845815d10114cae1.jpeg', 'https://i5.walmartimages.com/asr/290f36c3-2abe-4cea-b555-a123e18acd84.6969607693fe04e413c9100c85af9cc3.jpeg'], 'imagesThumbnail': ['https://i5.walmartimages.com/asr/e138cc0a-bc01-4bec-b92f-a38e2ba43059.33994c2503fb3885845815d10114cae1.jpeg?odnHeight=80&odnWidth=80&odnBg=FFFFFF', 'https://i5.walmartimages.com/asr/290f36c3-2abe-4cea-b555-a123e18acd84.6969607693fe04e413c9100c85af9cc3.jpeg?odnHeight=80&odnWidth=80&odnBg=FFFFFF']}, ...]
  • Related