GraphQL

overview page of web interface
GraphQL tab in log inspection
Graphql Query is only effective on html content type.

Introduction

Use the power of GraphQL as query language for web scrapped data. You will be able to retrieve directly pre formatted data, and only needed data rather than a raw HTML format. GraphQL x Scrapfly allow you to handle complex data structure with a simple and well known query language.

Query Fields

Leave selector empty to refer on current selected element.

specs: query(selector: "ul > li") {
    spec: text(selector: "")
}
            
Name Description Signature
int Extract and parse content as integer for the selected DOM int(selector:string) -> null|int
date Extract and parse content as date for the selected DOM (Automatically detect the format) date(selector:string, extractor:optional[string], opts:optional[string]) -> null|string
datetime Extract and parse content as datetime for the selected DOM (Automatically detect the format) datetime(selector:string, opts:optional[string]) -> null|string
float Extract and parse content as float for the selected DOM float(selector:string, opts:optional[string]) -> null|string|array[float]
money Extract money (currency and amount) for the selected DOM (Automatically detect the format) money(selector:string, opts:optional[string]) -> null|json_array[amount:float, currency:string]
content The html representation of the subnodes for the selected DOM content(selector:string, extractor:optional[string], extractor_opts:option[json])
html The html representation of the selected DOM html(selector:string)
text The text for the selected DOM text(selector:string)
tag The tag for the selected DOM tag(selector:string)
attr The DOM attr of the Node attr(selector:string, name:string, extractor:optional[string], extractor_opts:option[json])
query Find elements using selector traversing down query(selector:string)
children The list of children elements children(selector:string)
parents The list of parent elements parents(selector:string)
parents The list of parent element parent(selector:string)
siblings The siblings elements siblings(selector:string)
next The immediately following sibling next(selector:string)
nextAll The list of following siblings next_all(selector:string)
prev The immediately preceding sibling prev(selector:string)
prevAll The list of preceding siblings prev_all(selector:string)
verticalTable The representation of html table vertical_table(selector:string) -> json_array

Extractors & Formatters

Name Description Options
url Extract and format url from content
json Extract json data from content
money Extract money (amount & currency) from content. Return null if nothing match
datetime Extract datetime from content. Return null if nothing match
date Extract date from content. Return null if nothing match
float Extract float from content. Return null if nothing match
  • multiline:bool
  • multiple:bool

Error Handling

If something goes wrong, you get the feedback of error.

Web Interface

overview page of web interface
GraphQL error

API

openapi openapi Error Information | Json
            "error": {
    "code": "ERR::GRAPHQL::INVALID_QUERY",
    "message": "Syntax Error GraphQL (8:6) Expected Name, found EOF 7: } 8: } ^"
}

        

Example

Query

Interactive Example: Hacker News GraphQL Query Example
openapi openapi Hacker News GraphQL Query Example Sign in
            curl -X GET https://api.scrapfly.io/scrape?key=__API_KEY__&url=https%3A%2F%2Fnews.ycombinator.com&retry=false&correlation_id=eae2fdb8-8501-4d94-8f4d-9c417eeb639a&render_js=true&graphql=%257B%250D%250A%2B%2B%2B%2Bpage%2B%257B%250D%250A%2B%2B%2B%2B%2B%2B%2B%2Bnews%253A%2Bquery%2528selector%253A%2B%2522table.itemlist%2B%253E%2Btbody%2B%253E%2Btr.athing%2522%2529%2B%257B%250D%250A%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2Btitle%253A%2Btext%2528selector%253A%2B%2522td.title%2B%253E%2Ba%2522%2529%250D%250A%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2Bwebsite%253A%2Btext%2528selector%253A%2B%2522td.title%2B%253E%2Bspan.comhead%2522%2529%250D%250A%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2Blink%253A%2Battr%2528selector%253A%2B%2522td.title%2B%253E%2Ba%2522%2Bname%253A%2B%2522href%2522%2529%250D%250A%2B%2B%2B%2B%2B%2B%2B%2B%257D%250D%250A%2B%2B%2B%2B%257D%250D%250A%257D
        
HTTP Call Pretty Print
https://api.scrapfly.io/scrape?key=&url=https%3A%2F%2Fnews.ycombinator.com&retry=false&correlation_id=eae2fdb8-8501-4d94-8f4d-9c417eeb639a&render_js=true&graphql=%257B%250D%250A%2B%2B%2B%2Bpage%2B%257B%250D%250A%2B%2B%2B%2B%2B%2B%2B%2Bnews%253A%2Bquery%2528selector%253A%2B%2522table.itemlist%2B%253E%2Btbody%2B%253E%2Btr.athing%2522%2529%2B%257B%250D%250A%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2Btitle%253A%2Btext%2528selector%253A%2B%2522td.title%2B%253E%2Ba%2522%2529%250D%250A%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2Bwebsite%253A%2Btext%2528selector%253A%2B%2522td.title%2B%253E%2Bspan.comhead%2522%2529%250D%250A%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2Blink%253A%2Battr%2528selector%253A%2B%2522td.title%2B%253E%2Ba%2522%2Bname%253A%2B%2522href%2522%2529%250D%250A%2B%2B%2B%2B%2B%2B%2B%2B%257D%250D%250A%2B%2B%2B%2B%257D%250D%250A%257D

key
=
url
= https%3A%2F%2Fnews.ycombinator.com
retry
= false
correlation_id
= eae2fdb8-8501-4d94-8f4d-9c417eeb639a
render_js
= true
graphql
= %257B%250D%250A%2B%2B%2B%2Bpage%2B%257B%250D%250A%2B%2B%2B%2B%2B%2B%2B%2Bnews%253A%2Bquery%2528selector%253A%2B%2522table.itemlist%2B%253E%2Btbody%2B%253E%2Btr.athing%2522%2529%2B%257B%250D%250A%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2Btitle%253A%2Btext%2528selector%253A%2B%2522td.title%2B%253E%2Ba%2522%2529%250D%250A%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2Bwebsite%253A%2Btext%2528selector%253A%2B%2522td.title%2B%253E%2Bspan.comhead%2522%2529%250D%250A%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2Blink%253A%2Battr%2528selector%253A%2B%2522td.title%2B%253E%2Ba%2522%2Bname%253A%2B%2522href%2522%2529%250D%250A%2B%2B%2B%2B%2B%2B%2B%2B%257D%250D%250A%2B%2B%2B%2B%257D%250D%250A%257D
openapi openapi Hacker News GraphQL Query Example | Graphql
            {
    page {
        news: query(selector: "table.itemlist > tbody > tr.athing") {
            title: text(selector: "td.title > a")
            website: text(selector: "td.title > span.comhead")
            link: attr(selector: "td.title > a" name: "href")
        }
    }
}

        

Result

openapi openapi Hacker News Result | Json
            array(1) {
  ["page"] =>
  array(1) {
    ["news"] =>
    array(30) {
      [0] =>
      array(3) {
          ["title"] =>
          string(41)
          "From context collapse to content collapse" ["website"] =>
          string(15)
          "(roughtype.com)" ["link"] =>
          string(32)
          "http://www.roughtype.com/?p=8724"
        }
        [1] =>
        array(3) {
          ["title"] =>
          string(34)
          "Apple iPhone SE 2020 Camera review" ["website"] =>
          string(13)
          "(dxomark.com)" ["link"] =>
          string(59)
          "https://www.dxomark.com/apple-iphone-se-2020-camera-review/"
        }
        [2] =>
        array(3) {
          ["title"] =>
          string(77)
          "MaXX Interactive Desktop: A Re-Implementation of the IRIX Interactive Desktop" ["website"] =>
          string(21)
          "(maxxinteractive.com)" ["link"] =>
          string(28)
          "https://maxxinteractive.com/"
        }
        [3] =>
        array(3) {
          ["title"] =>
          string(71)
          "A look at the Gemini protocol: a brutally simple alternative to the web" ["website"] =>
          string(16)
          "(toffelblog.xyz)" ["link"] =>
          string(44)
          "https://toffelblog.xyz/blog/gemini-overview/"
        }
        [4] =>
        array(3) {
          ["title"] =>
          string(75)
          "Scuba diver accidentally discovers prehistoric industrial complex in Mexico" ["website"] =>
          string(18)
          "(nationalpost.com)" ["link"] =>
          string(129)
          "https://nationalpost.com/news/world/a-canadian-scuba-diver-in-mexico-accidentally-discovers-a-vast-prehistoric-industrial-complex"
        }
        [5] =>
        array(3) {
          ["title"] =>
          string(43)
          "Quick Intro to Fully Homomorphic Encryption" ["website"] =>
          string(14)
          "(higashi.tech)" ["link"] =>
          string(47)
          "http://blog.higashi.tech/2020/06/16/fhe_01.html"
        }
        [6] =>
        array(3) {
          ["title"] =>
          string(20)
          "SSH Emergency Access" ["website"] =>
          string(15)
          "(smallstep.com)" ["link"] =>
          string(48)
          "https://smallstep.com/blog/ssh-emergency-access/"
        }
        [7] =>
        array(3) {
          ["title"] =>
          string(41)
          "Harmful Workload Generator for PostgreSQL" ["website"] =>
          string(12)
          "(github.com)" ["link"] =>
          string(34)
          "https://github.com/lesovsky/noisia"
        }
        [8] =>
        array(3) {
          ["title"] =>
          string(30)
          "Where Am I? NYTimes or Google?" ["website"] =>
          string(22)
          "(theinternetbytes.com)" ["link"] =>
          string(51)
          "https://theinternetbytes.com/2020/07/03/where-am-i/"
        }
        [9] =>
        array(3) {
          ["title"] =>
          string(49)
          "Low latency multipliers and cryptographic puzzles" ["website"] =>
          string(16)
          "(janestreet.com)" ["link"] =>
          string(85)
          "https://blog.janestreet.com/really-low-latency-multipliers-and-cryptographic-puzzles/"
        }
        [10] =>
        array(3) {
          ["title"] =>
          string(15)
          "Sphere Eversion" ["website"] =>
          string(20)
          "(rreusser.github.io)" ["link"] =>
          string(56)
          "https://rreusser.github.io/explorations/sphere-eversion/"
        }
        [11] =>
        array(3) {
          ["title"] =>
          string(38)
          "The danger of surrogate metrics (2007)" ["website"] =>
          string(15)
          "(microsoft.com)" ["link"] =>
          string(83)
          "https://blogs.msdn.microsoft.com/ericgu/2007/05/10/the-danger-of-surrogate-metrics/"
        }
        [12] =>
        array(3) {
          ["title"] =>
          string(44)
          "Relativity behind mercury's liquidity (2013)" ["website"] =>
          string(20)
          "(chemistryworld.com)" ["link"] =>
          string(85)
          "https://www.chemistryworld.com/news/relativity-behind-mercurys-liquidity/6297.article"
        }
        [13] =>
        array(3) {
          ["title"] =>
          string(70)
          "Yamato becomes Japan's first city to 'ban' use of phones while walking" ["website"] =>
          string(18)
          "(japantimes.co.jp)" ["link"] =>
          string(86)
          "https://www.japantimes.co.jp/news/2020/06/25/national/yamato-japan-ban-phones-walking/"
        }
        [14] =>
        array(3) {
          ["title"] =>
          string(61)
          "Closos: Specification of a Lisp operating system (2013) [pdf]" ["website"] =>
          string(17)
          "(metamodular.com)" ["link"] =>
          string(33)
          "http://metamodular.com/closos.pdf"
        }
        [15] =>
        array(3) {
          ["title"] =>
          string(55)
          "Differential privacy tools from MS Research and Harvard" ["website"] =>
          string(15)
          "(microsoft.com)" ["link"] =>
          string(89)
          "https://blogs.microsoft.com/on-the-issues/2020/06/24/differential-privacy-harvard-opendp/"
        }
        [16] =>
        array(3) {
          ["title"] =>
          string(73)
          "Possible planet in habitable zone found around GJ877, 11 light years away" ["website"] =>
          string(10)
          "(nasa.gov)" ["link"] =>
          string(91)
          "https://astrobiology.nasa.gov/news/close-and-tranquil-solar-system-has-astronomers-excited/"
        }
        [17] =>
        array(3) {
          ["title"] =>
          string(74)
          "Thrones Wreathed in Shadow: Tacitus and the psychology of authoritarianism" ["website"] =>
          string(19)
          "(warontherocks.com)" ["link"] =>
          string(108)
          "https://warontherocks.com/2020/07/thrones-wreathed-in-shadow-tacitus-and-the-psychology-of-authoritarianism/"
        }
        [18] =>
        array(3) {
          ["title"] =>
          string(28)
          "Photo Requests from Solitary" ["website"] =>
          string(31)
          "(photorequestsfromsolitary.org)" ["link"] =>
          string(37)
          "http://photorequestsfromsolitary.org/"
        }
        [19] =>
        array(3) {
          ["title"] =>
          string(12)
          "Github.audio" ["website"] =>
          string(14)
          "(github.audio)" ["link"] =>
          string(21)
          "https://github.audio/"
        }
        [20] =>
        array(3) {
          ["title"] =>
          string(63)
          "Students built a 16th-century engineer’s book-reading machine" ["website"] =>
          string(18)
          "(atlasobscura.com)" ["link"] =>
          string(70)
          "https://www.atlasobscura.com/articles/behold-the-renaissance-bookwheel"
        }
        [21] =>
        array(3) {
          ["title"] =>
          string(40)
          "Building a BASIC Interpreter, '80s style" ["website"] =>
          string(10)
          "(able.bio)" ["link"] =>
          string(77)
          "https://able.bio/kerrishotts/building-a-basic-interpreter-80s-style--79a9d703"
        }
        [22] =>
        array(3) {
          ["title"] =>
          string(76)
          "PuTTY: Observable Discrepancy leading to a leak in the algorithm negotiation" ["website"] =>
          string(10)
          "(nist.gov)" ["link"] =>
          string(47)
          "https://nvd.nist.gov/vuln/detail/CVE-2020-14002"
        }
        [23] =>
        array(3) {
          ["title"] =>
          string(16)
          "2+1=4, by quinoa" ["website"] =>
          string(12)
          "(efavdb.com)" ["link"] =>
          string(39)
          "https://www.efavdb.com/quinoa%20packing"
        }
        [24] =>
        array(3) {
          ["title"] =>
          string(34)
          "Learn to Create and Flex Flexagons" ["website"] =>
          string(11)
          "(loki3.com)" ["link"] =>
          string(30)
          "http://loki3.com/flex/explore/"
        }
        [25] =>
        array(3) {
          ["title"] =>
          string(31)
          "Bitcoin From Scratch – Part 1" ["website"] =>
          string(12)
          "(monokh.com)" ["link"] =>
          string(52)
          "https://monokh.com/posts/bitcoin-from-scratch-part-1"
        }
        [26] =>
        array(3) {
          ["title"] =>
          string(79)
          "Show HN: Screenshot.rocks – Create beautiful browser mockups from screenshots" ["website"] =>
          string(12)
          "(github.com)" ["link"] =>
          string(46)
          "https://github.com/daveearley/screenshot.rocks"
        }
        [27] =>
        array(3) {
          ["title"] =>
          string(47)
          "Hydrogen power might now be about to bear fruit" ["website"] =>
          string(15)
          "(economist.com)" ["link"] =>
          string(119)
          "https://www.economist.com/science-and-technology/2020/07/04/after-many-false-starts-hydrogen-power-might-now-bear-fruit"
        }
        [28] =>
        array(3) {
          ["title"] =>
          string(80)
          "Zettlr – FOSS markdown editor for personal knowledge management and publishing" ["website"] =>
          string(12)
          "(zettlr.com)" ["link"] =>
          string(23)
          "https://www.zettlr.com/"
        }
        [29] =>
        array(3) {
          ["title"] =>
          string(25)
          "Tench: When data is messy" ["website"] =>
          string(17)
          "(aiweirdness.com)" ["link"] =>
          string(66)
          "https://aiweirdness.com/post/622648824384602112/when-data-is-messy"
        }
    }
  }
}

        

Advanced Example

Query

Interactive Example: Advanced example with Amazon
openapi openapi Advanced example with Amazon Sign in
            curl -X GET https://api.scrapfly.io/scrape?key=__API_KEY__&url=https%3A%2F%2Fwww.amazon.com%2FMikroTik-Desktop-Gigabit-Ethernet-CRS309-1G-8S%2Fdp%2FB07NFXN4SS%2Fref%3Dsr_1_3%3Fdchild%3D1%26keywords%3Dmikrotik%2Bsfp%2Bswitch%26qid%3D1593892658%26sr%3D8-3&correlation_id=aa6395de-a32e-43a7-93f1-cc914673a19e&render_js=true&graphql=%257B%250D%250A%2B%2B%2B%2Bpage%2B%257B%250D%250A%2B%2B%2B%2B%2B%2B%2B%2Bitem_name%253A%2Btext%2528selector%253A%2B%2522span%2523productTitle%2522%2529%252C%250D%250A%2B%2B%2B%2B%2B%2B%2B%2Bnb_feedbacks%253A%2Bint%2528selector%253A%2B%2522span%2523acrCustomerReviewText%2522%2529%250D%250A%2B%2B%2B%2B%2B%2B%2B%2Bprice%253A%2Bmoney%2528selector%253A%2B%2522span%2523priceblock_ourprice%2522%2529%250D%250A%2B%2B%2B%2B%2B%2B%2B%2Bdescription%253A%2Btext%2528selector%253A%2B%2522div%2523productDescription%2522%2529%250D%250A%2B%2B%2B%2B%2B%2B%2B%2Binformations%253A%2BverticalTable%2528selector%253A%2B%2522table.prodDetTable%2522%2529%250D%250A%2B%2B%2B%2B%2B%2B%2B%2Bspecs%253A%2Bquery%2528selector%253A%2B%2522div%2523feature-bullets%2B%253E%2Bul%2B%253E%2Bli%2522%2529%2B%257B%250D%250A%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2Bspec%253A%2Btext%2528selector%253A%2B%2522%2522%2529%250D%250A%2B%2B%2B%2B%2B%2B%2B%2B%257D%250D%250A%2B%2B%2B%2B%257D%250D%250A%257D
        
HTTP Call Pretty Print
https://api.scrapfly.io/scrape?key=&url=https%3A%2F%2Fwww.amazon.com%2FMikroTik-Desktop-Gigabit-Ethernet-CRS309-1G-8S%2Fdp%2FB07NFXN4SS%2Fref%3Dsr_1_3%3Fdchild%3D1%26keywords%3Dmikrotik%2Bsfp%2Bswitch%26qid%3D1593892658%26sr%3D8-3&correlation_id=aa6395de-a32e-43a7-93f1-cc914673a19e&render_js=true&graphql=%257B%250D%250A%2B%2B%2B%2Bpage%2B%257B%250D%250A%2B%2B%2B%2B%2B%2B%2B%2Bitem_name%253A%2Btext%2528selector%253A%2B%2522span%2523productTitle%2522%2529%252C%250D%250A%2B%2B%2B%2B%2B%2B%2B%2Bnb_feedbacks%253A%2Bint%2528selector%253A%2B%2522span%2523acrCustomerReviewText%2522%2529%250D%250A%2B%2B%2B%2B%2B%2B%2B%2Bprice%253A%2Bmoney%2528selector%253A%2B%2522span%2523priceblock_ourprice%2522%2529%250D%250A%2B%2B%2B%2B%2B%2B%2B%2Bdescription%253A%2Btext%2528selector%253A%2B%2522div%2523productDescription%2522%2529%250D%250A%2B%2B%2B%2B%2B%2B%2B%2Binformations%253A%2BverticalTable%2528selector%253A%2B%2522table.prodDetTable%2522%2529%250D%250A%2B%2B%2B%2B%2B%2B%2B%2Bspecs%253A%2Bquery%2528selector%253A%2B%2522div%2523feature-bullets%2B%253E%2Bul%2B%253E%2Bli%2522%2529%2B%257B%250D%250A%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2Bspec%253A%2Btext%2528selector%253A%2B%2522%2522%2529%250D%250A%2B%2B%2B%2B%2B%2B%2B%2B%257D%250D%250A%2B%2B%2B%2B%257D%250D%250A%257D

key
=
url
= https%3A%2F%2Fwww.amazon.com%2FMikroTik-Desktop-Gigabit-Ethernet-CRS309-1G-8S%2Fdp%2FB07NFXN4SS%2Fref%3Dsr_1_3%3Fdchild%3D1%26keywords%3Dmikrotik%2Bsfp%2Bswitch%26qid%3D1593892658%26sr%3D8-3
correlation_id
= aa6395de-a32e-43a7-93f1-cc914673a19e
render_js
= true
graphql
= %257B%250D%250A%2B%2B%2B%2Bpage%2B%257B%250D%250A%2B%2B%2B%2B%2B%2B%2B%2Bitem_name%253A%2Btext%2528selector%253A%2B%2522span%2523productTitle%2522%2529%252C%250D%250A%2B%2B%2B%2B%2B%2B%2B%2Bnb_feedbacks%253A%2Bint%2528selector%253A%2B%2522span%2523acrCustomerReviewText%2522%2529%250D%250A%2B%2B%2B%2B%2B%2B%2B%2Bprice%253A%2Bmoney%2528selector%253A%2B%2522span%2523priceblock_ourprice%2522%2529%250D%250A%2B%2B%2B%2B%2B%2B%2B%2Bdescription%253A%2Btext%2528selector%253A%2B%2522div%2523productDescription%2522%2529%250D%250A%2B%2B%2B%2B%2B%2B%2B%2Binformations%253A%2BverticalTable%2528selector%253A%2B%2522table.prodDetTable%2522%2529%250D%250A%2B%2B%2B%2B%2B%2B%2B%2Bspecs%253A%2Bquery%2528selector%253A%2B%2522div%2523feature-bullets%2B%253E%2Bul%2B%253E%2Bli%2522%2529%2B%257B%250D%250A%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2B%2Bspec%253A%2Btext%2528selector%253A%2B%2522%2522%2529%250D%250A%2B%2B%2B%2B%2B%2B%2B%2B%257D%250D%250A%2B%2B%2B%2B%257D%250D%250A%257D
openapi openapi Advanced Graphl example with Amazon | Graphql
            {
  page {
    item_name: text(selector: "span#productTitle"),
    nb_feedbacks: int(selector: "span#acrCustomerReviewText")
    price: money(selector: "span#priceblock_ourprice")
    description: text(selector: "div#productDescription")
    informations: verticalTable(selector: "table.prodDetTable")
    rating: content("span
      specs: query(selector: "div#feature-bullets > ul > li") {
        spec: text(selector: "")
      }
    }
}
        

Result

openapi openapi Amazon Result | Json
             array(1) {
   ["page"] =>
   array(6) {
     ["item_name"] =>
     string(94)
     "MikroTik 9-Port Desktop Switch, 1 Gigabit Ethernet Port, 8 SFP+ 10Gbps Ports (CRS309-1G-8S+IN)" ["nb_feedbacks"] =>
     int(44)["price"] =>
       string(35)
     "{'amount': 245.23, 'currency': '$'}" ["description"] =>
     string(471)
     "The CRS309-1G-8S+ is a very compact, yet powerful networking switch. It has eight SFP+ slots, supporting up to 10 Gbit module in each, which results in a total switching capacity of 162 Gbps and total non-blocking throughput of 81 Gbps. The device also has dual-core 800 MHz CPU, 512 MB RAM, a management Ethernet port with PoE power input, RS232 serial port, a grounding terminal and is capable of dual boot (choose which operating system you prefer, RouterOS, or SwOS)." ["informations"] =>
     string(640)
     "{"
     Package Dimensions ": "
     15 x 8.27 x 2.09 inches ", "
     Item Weight ": "
     2.66 pounds ", "
     Manufacturer ": "
     Mikrotik ", "
     ASIN ": "
     B07NFXN4SS ", "
     Item model number ": "
     CRS309 - 1 G - 8 S + IN ", "
     Customer Reviews ": " /* * Fix for UDP-1061. Average customer reviews has a small extra line on hover * https://omni-grok.amazon.com/xref/src/appgroup/websiteTemplates/retail/SoftlinesDetailPageAssets/udp-intl-lock/src/legacy.css?indexName=WebsiteTemplates#40 */ .noUnderline a: hover {
       text - decoration: none;
     }\
     n4 .4 out of 5 stars 44 ratings\ n\ n4 .4 out of 5 stars ", "
     Best Sellers Rank ": "
     #235 in Computer Networking Switches", "Date First Available": "February 22, 2019"}"
    ["specs"]= >
       array(6) {
         [0] =>
         array(1) {
             ["spec"] =>
             string(50)
             "Make sure this fits by entering your model number."
           }
           [1] =>
           array(1) {
             ["spec"] =>
             string(67)
             "The CRS309-1G-8S+ is a very compact, yet powerful networking switch"
           }
           [2] =>
           array(1) {
             ["spec"] =>
             string(166)
             "It has eight SFP+ slots, supporting up to 10 Gbit module in each, which results in a total switching capacity of 162 Gbps and total non-blocking throughput of 81 Gbps"
           }
           [3] =>
           array(1) {
             ["spec"] =>
             string(233)
             "The device also has dual-core 800 MHz CPU, 512 MB RAM, a management Ethernet port with PoE power input, RS232 serial port, a grounding terminal and is capable of dual boot (choose which operating system you prefer, RouterOS, or SwOS)"
           }
           [4] =>
           array(1) {
             ["spec"] =>
             string(148)
             "The compact and sleek metallic enclosure also acts as a heatsink, making this device passively cooled - no fan noise and no dust accumulation inside"
           }
           [5] =>
           array(1) {
             ["spec"] =>
             string(78)
             "Special rackmount ears for installing unit into the standard rack are provided"
           }
       }
   }
 }