Um raspador Node.js para humanos.
Patrocinado com ❤️ por:
Capsolver.com é um serviço de IA especializado em resolver vários tipos de captchas automaticamente. Ele suporta captchas como Recaptcha V2, Recaptcha V3, Hcaptcha, Funcaptcha, Datadome, AWS Captcha, Geetest e CloudFlare Captcha / Challenge 5s, Imperva / Incapsula, entre outros. Para os desenvolvedores, o Capsolver oferece opções de integração de API detalhadas em sua documentação, facilitando a integração do CAPTCHA Solução em aplicativos. Eles também fornecem extensões de navegador para o Chrome e o Firefox, facilitando o uso de seus serviços diretamente em um navegador. Pacotes de preços diferentes estão disponíveis para acomodar necessidades variadas, garantindo flexibilidade para os usuários.
# Using npm
npm install --save scrape-it
# Using yarn
yarn add scrape-it Protip : você pode instalar a versão da CLI deste módulo executando npm install --global scrape-it-cli (ou yarn global add scrape-it-cli ).
Aqui estão algumas perguntas frequentes e suas respostas.
scrape-it possui apenas um módulo de solicitação simples para fazer solicitações. Isso significa que você não pode analisar diretamente as páginas do Ajax, mas em geral você terá esses cenários:
scrape-it do URL do Ajax (por exemplo example.com/api/that-endpoint ) e você poderá analisar a resposta.scrapeHTML de raspar -o depois de carregar o HTML na página. Não existe uma maneira sofisticada de rastejar páginas com scrape-it . Para cenários simples, você pode analisar a lista de URLs na página inicial e, em seguida, usando promessas, analisando cada página. Além disso, você pode usar um rastreador diferente para fazer o download do site e, em seguida, usar o método .scrapeHTML para raspar os arquivos locais.
Use o .scrapeHTML para analisar a leitura html dos arquivos locais usando fs.readFile .
const scrapeIt = require ( "scrape-it" )
// Promise interface
scrapeIt ( "https://ionicabizau.net" , {
title : ".header h1"
, desc : ".header h2"
, avatar : {
selector : ".header img"
, attr : "src"
}
} ) . then ( ( { data , status } ) => {
console . log ( `Status Code: ${ status } ` )
console . log ( data )
} ) ;
// Async-Await
( async ( ) => {
const { data } = await scrapeIt ( "https://ionicabizau.net" , {
// Fetch the articles
articles : {
listItem : ".article"
, data : {
// Get the article date and convert it into a Date object
createdAt : {
selector : ".date"
, convert : x => new Date ( x )
}
// Get the title
, title : "a.article-title"
// Nested list
, tags : {
listItem : ".tags > span"
}
// Get the content
, content : {
selector : ".article-content"
, how : "html"
}
// Get attribute value of root listItem by omitting the selector
, classes : {
attr : "class"
}
}
}
// Fetch the blog pages
, pages : {
listItem : "li.page"
, name : "pages"
, data : {
title : "a"
, url : {
selector : "a"
, attr : "href"
}
}
}
// Fetch some other data from the page
, title : ".header h1"
, desc : ".header h2"
, avatar : {
selector : ".header img"
, attr : "src"
}
} )
console . log ( data )
// { articles:
// [ { createdAt: Mon Mar 14 2016 00:00:00 GMT+0200 (EET),
// title: 'Pi Day, Raspberry Pi and Command Line',
// tags: [Object],
// content: '<p>Everyone knows (or should know)...a" alt=""></p>n',
// classes: [Object] },
// { createdAt: Thu Feb 18 2016 00:00:00 GMT+0200 (EET),
// title: 'How I ported Memory Blocks to modern web',
// tags: [Object],
// content: '<p>Playing computer games is a lot of fun. ...',
// classes: [Object] },
// { createdAt: Mon Nov 02 2015 00:00:00 GMT+0200 (EET),
// title: 'How to convert JSON to Markdown using json2md',
// tags: [Object],
// content: '<p>I love and ...',
// classes: [Object] } ],
// pages:
// [ { title: 'Blog', url: '/' },
// { title: 'About', url: '/about' },
// { title: 'FAQ', url: '/faq' },
// { title: 'Training', url: '/training' },
// { title: 'Contact', url: '/contact' } ],
// title: 'Ionică Bizău',
// desc: 'Web Developer, Linux geek and Musician',
// avatar: '/images/logo.png' }
} ) ( ) Existem poucas maneiras de obter ajuda:
scrapeIt(url, opts, cb)Um módulo de raspagem para humanos.
url do objeto: o URL da página ou as opções de solicitação.opts do objeto : as opções passadas para o método scrapeHTML .cb : a função de retorno de chamada. data (objeto): os dados raspados.$ (Função): a função Cheeerio. Isso pode ser útil para fazer alguma outra manipulação no DOM, se necessário.response (objeto): o objeto de resposta.body (corda): o corpo bruto como uma corda.scrapeIt.scrapeHTML($, opts)Raspa os dados no elemento fornecido.
Para o formato do seletor, consulte a seção Seletores da Cheerio Library
Cheerio $ : o elemento de entrada.
opts objeto : um objeto que contém as informações de raspagem. Se você deseja raspar uma lista, deve usar o seletor listItem :
listItem (string): o seletor de item da lista.data (objeto): os campos a serem incluídos nos objetos da lista:<fieldName> (objeto | string): o seletor ou um objeto que contém:selector (string): o seletor.convert (função): uma função opcional para alterar o valor.how (função | string): um nome de função ou função para acessar o valor.attr (string): se fornecido, o valor será levado com base no nome do atributo.trim (booleano): se false , o valor não será aparado (padrão: true ).closest (string): se fornecido, retorna o primeiro ancestral do elemento dado.eq (número): se fornecido, selecionará o enésimo elemento.texteq (número): Se fornecido, selecionará o enésimo filho de texto direto. A seleção de crianças em texto profundo ainda não é possível. Substitui a chave how a chave.listItem (objeto): um objeto, mantendo o esquema recursivo do objeto listItem . Isso pode ser usado para criar listas aninhadas.Exemplo :
{
articles : {
listItem : ".article"
, data : {
createdAt : {
selector : ".date"
, convert : x => new Date ( x )
}
, title : "a.article-title"
, tags : {
listItem : ".tags > span"
}
, content : {
selector : ".article-content"
, how : "html"
}
, traverseOtherNode : {
selector : ".upperNode"
, closest : "div"
, convert : x => x . length
}
}
}
} Se você deseja coletar dados específicos da página, use o mesmo esquema usado para o campo data .
Exemplo :
{
title : ".header h1"
, desc : ".header h2"
, avatar : {
selector : ".header img"
, attr : "src"
}
} Tem uma ideia? Encontrou um bug? Veja como contribuir.
Eu sou de código aberto quase tudo o que posso e tento responder a todos que precisam de ajuda para usar esses projetos. Obviamente, isso leva tempo. Você pode integrar e usar esses projetos em seus aplicativos gratuitamente ! Você pode até alterar o código -fonte e o redistribuição (até revenderem).
No entanto, se você obtiver algum lucro com isso ou apenas quiser me incentivar a continuar criando coisas, há poucas maneiras de fazê -lo:
Estrelando e compartilhando os projetos que você gosta
—Eu Love Livros! Vou me lembrar de você depois de anos se você me comprar um. ?
-Você pode fazer doações únicas via PayPal. Provavelmente vou comprar um café chá. ?
—Ter uma doação mensal recorrente e você receberá notícias interessantes sobre o que estou fazendo (coisas que não compartilho com todos).
Bitcoin - você pode me enviar bitcoins neste endereço (ou digitalizar o código abaixo): 1P9BRsmazNQcuyTxEqveUsnf5CERdq35V6
Obrigado! ❤️
Se você estiver usando esta biblioteca em um de seus projetos, adicione -o nesta lista.
3abn@alexjorgef/bandcamp-scraper@ben-wormald/bandcamp-scraper@bogochunas/package-shopify-crawler@lukekarrys/ebp@markab.io/node-api@thetrg/gibson@tryghost/mg-webscraper@web-master/node-web-scraper@zougui/furaffinityairport-clujapixpressbandcamp-scraperbeervana-scraperbible-scraperblankningsregistretblockchain-notifierbrave-search-scrapercamaleoncarirscevo-lookupcnn-marketcodementorcodinglove-scrapercovidaudegusta-scrapperdncliegg-crawlerfa.jsflamescraperfmgo-marketdatagatsby-source-bandcampgrowapihelyesirasjishonjobs-fetcherleximavenmacoolka-net-scrapemacoolka-networkmersul-microbuzelormersul-trenurilormit-ocw-scrapermix-dlnode-red-contrib-getdata-websitenode-red-contrib-scrape-itnurlresolverpaklek-cliparnpicarto-librayko-toolsrs-apisahibindensahibindenServersalesforcerelease-parserscrape-it-cliscrape-vinmonopoletscrapos-workersgdq-collectorsimple-ai-alphaspon-marketstartpage-quick-searchsteam-workshop-scrapertrump-cabinet-picksu-pull-it-ne-parts-finderubersetzungui-studentsearchuniversity-news-notifieruniwue-lernplaetze-scrapervandalen.rhyme.jswikitoolsyu-ncov-scrape-dxyMit © ionică bizău