Próbuję złom stronę internetową za pomocą następującego kodu:Getting TypeError: selector.includes nie jest funkcją kiedy skrobanie z cheerio i jsonframe
const cheerio = require('cheerio');
const jsonframe = require('jsonframe-cheerio');
const $ = cheerio.load('https://coinmarketcap.com/all/views/all/');
jsonframe($); // initializes the plugin
//exception handling
process.on('uncaughtException', err =>
console.error('uncaught exception: ', err))
process.on('unhandledRejection', (reason, p) =>
console.error('unhandled rejection: ', reason, p))
const frame = {
"crypto": {
"selector": "tbody > tr",
"data": [{
"name": "td:nth-child(2) > a:nth-child(3)",
"url": {
"selector": "td:nth-child(2) > a:nth-child(3)",
"attr": "href"
},
"marketcap": "tr > td:nth-child(4)",
"price": "tr > td:nth-child(5) > a:nth-child(1)",
}]
}
};
let companiesList = $('tbody').scrape(frame);
console.log(companiesList);
Jednak dostaję UnhandledPromiseRejectionWarning
gdy uruchomiony Powyższy przykład kodu :
(node:3890) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): TypeError: selector.includes is not a function
Jakieś sugestie co robię źle?
Doceniam twoje odpowiedzi!
UPDATE
zmieniłem mojego kodu poniżej następujący. Jednak mogę tylko złomować pierwszy element.
Jakieś sugestie, dlaczego pozostałe elementy nie zostaną złomowane?
const cheerio = require('cheerio')
const jsonframe = require('jsonframe-cheerio')
const got = require('got');
async function scrapCoinmarketCap() {
const url = 'https://coinmarketcap.com/all/views/all/'
const html = await got(url)
const $ = cheerio.load(html.body)
jsonframe($) // initializing the plugin
let frame = {
"Coin": "td.no-wrap.currency-name > a",
"url": "td.no-wrap.currency-name > a @ href",
"Symbol": "td.text-left.col-symbol",
"Price": "td:nth-child(5) > a",
}
console.log($('body').scrape(frame, {
string: true
}))
}
scrapCoinmarketCap()
Którą wersję węzła używasz? –
Jakiej wersji 'jsonframe-cheerio' używasz? Sądząc po składni w twoim fragmencie, podejrzewam, że polegasz na dokumentacji lub przykładzie wersji 1.x. Najnowsza wersja 2.x wprowadziła wiele zmian. Plik readme zawiera następujące ostrzeżenie: _ "Ostrożnie, jeśli korzystasz z jsonframe z wersji 1.xx, niektóre rzeczy zostały zmienione, aby były bardziej elastyczne, szybsze w użyciu (parametry wbudowane) i bardziej znaczące w składni" ._ – Boaz
@FelixKling Używam 'node --version'' v8.4.0' – mrquad