IonicaBizau / scrape-it

🔮 A Node.js scraper for humans.

Home Page:http://ionicabizau.net/blog/30-how-to-write-a-web-scraper-in-node-js

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

$ is not a function in a Remix App

Rogant opened this issue · comments

Hello Everyone

I'm getting this error running scrape-it into a Remix app with the blues stack, if I run my code isolated works perfect, any ideas?

Here the error

/home/rogant/dev/findcard/node_modules/iterate-object/lib/index.js:28 if (fn(obj[keys[i]], keys[i], obj) === false) { ^ TypeError: $ is not a function at /home/rogant/dev/findcard/node_modules/scrape-it-core/lib/index.js:137:30 at iterateObject (/home/rogant/dev/findcard/node_modules/iterate-object/lib/index.js:28:17) at handleDataObj (/home/rogant/dev/findcard/node_modules/scrape-it-core/lib/index.js:119:9) at Function.module.exports [as scrapeHTML] (/home/rogant/dev/findcard/node_modules/scrape-it-core/lib/index.js:208:12) at Request._callback (/home/rogant/dev/findcard/node_modules/scrape-it/lib/index.js:32:40) at Request.self.callback (/home/rogant/dev/findcard/node_modules/request/request.js:185:22) at Request.emit (node:events:390:28) at Request.<anonymous> (/home/rogant/dev/findcard/node_modules/request/request.js:1154:10) at Request.emit (node:events:390:28) at PassThrough.<anonymous> (/home/rogant/dev/findcard/node_modules/request/request.js:1076:12) ERROR: "dev:server" exited with 1.

Here my script

"use strict";

const scrapeIt = require("scrape-it");

export function getDracoCards(query) {
  return scrapeIt(`https://dracostore.co/?s=rune&post_type=product&dgwt_wcas=1`, {
    cards: {
      listItem: "li.product",
        data: {
          name: "h2.woocommerce-loop-product__title",
          foil: {
            selector: ".ast-woo-product-category",
            convert: (cat) => cat.toLowerCase().indexOf('foil') > -1,
          },
          price: {
            selector: ".woocommerce-Price-amount",
            convert: (price) => price.replace('$', '')
          }
      }
    }
  }).then((data) => {
    console.log(data.data.cards)
  })
}

Hi @Rogant! I am afraid this is very specific to the environment where you run the script. I ran it on my machine and it seems to work fine:

[
  { name: 'Rune Snag', foil: false, price: ' 900' },
  { name: 'Rune Snag', foil: true, price: ' 2.000' },
  { name: 'Runed Halo', foil: true, price: ' 9.900' },
  { name: 'Runed Halo', foil: true, price: ' 6.600' },
  { name: 'Runed Halo', foil: false, price: ' 1.700' },
  { name: 'Runed Halo', foil: false, price: ' 3.300' },
  { name: 'Runed Halo', foil: false, price: ' 2.000' },
  { name: 'Runed Crown', foil: false, price: ' 900' },
  { name: 'Runebound Wolf', foil: true, price: ' 3.300' },
  { name: 'Runebound Wolf', foil: true, price: ' 1.700' },
  { name: 'Runebound Wolf', foil: false, price: ' 900' },
  { name: 'Rune of Flight', foil: true, price: ' 1.700' }
]

Can you check if cheerio itself works in your environment?