Un raspador de nodo.js para humanos.
Patrocinado con ❤️ por:
Capsolver.com es un servicio con IA que se especializa en resolver varios tipos de Captchas automáticamente. Admite Captchas como Recaptcha V2, Recaptcha V3, HCaptcha, Funcaptcha, Datadome, AWS Captcha, Geetest y Cloudflare Captcha / Challenge 5s, Imperva / Incapsula, entre otros. Para los desarrolladores, Capsolver ofrece opciones de integración de API detalladas en su documentación, facilitando la integración de la resolución de Captcha en aplicaciones. También proporcionan extensiones del navegador para Chrome y Firefox, lo que facilita el uso de su servicio directamente dentro de un navegador. Hay diferentes paquetes de precios disponibles para acomodar necesidades variables, asegurando la flexibilidad para los usuarios.
# Using npm
npm install --save scrape-it
# Using yarn
yarn add scrape-it ProtIP : puede instalar la versión CLI de este módulo ejecutando npm install --global scrape-it-cli (o yarn global add scrape-it-cli ).
Aquí hay algunas preguntas frecuentes y sus respuestas.
scrape-it solo tiene un módulo de solicitud simple para hacer solicitudes. Eso significa que no puede analizar directamente las páginas AJAX con él, pero en general tendrá esos escenarios:
scrape-it la url de Ajax (por ejemplo example.com/api/that-endpoint ) y usted podrá analizar la respuesta.scrapeHTML de rasparlo una vez que se cargue el HTML en la página. No hay una forma elegante de rastrear páginas con scrape-it . Para escenarios simples, puede analizar la lista de URL de la página inicial y luego, usando promesas, analizar cada página. Además, puede usar un rastreador diferente para descargar el sitio web y luego usar el método .scrapeHTML para raspar los archivos locales.
Use el .scrapeHTML para analizar la lectura HTML de los archivos locales 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' }
} ) ( ) Hay pocas formas de obtener ayuda:
scrapeIt(url, opts, cb)Un módulo de raspado para humanos.
url de objeto: la URL de la página o las opciones de solicitud.opts de objeto : las opciones pasadas al método scrapeHTML .cb : la función de devolución de llamada. data (objeto): los datos raspados.$ (Función): la función Cheeerio. Esto puede ser útil para hacer alguna otra manipulación en el DOM, si es necesario.response (objeto): el objeto de respuesta.body (cadena): el cuerpo crudo como una cadena.scrapeIt.scrapeHTML($, opts)Raspa los datos en el elemento proporcionado.
Para el formato del selector, consulte la sección Selectores de la Biblioteca Cheerio
Cheerio $ : El elemento de entrada.
opts de objeto : un objeto que contiene la información de raspado. Si desea raspar una lista, debe usar el selector listItem :
listItem (String): el selector de elementos de lista.data (objeto): los campos para incluir en los objetos de la lista:<fieldName> (objeto | string): el selector o un objeto que contiene:selector (cadena): el selector.convert (función): una función opcional para cambiar el valor.how (función | cadena): un nombre de función o función para acceder al valor.attr (cadena): si se proporciona, el valor se tomará en función del nombre del atributo.trim (BOOLEAN): si es false , el valor no se recortará (predeterminado: true ).closest (cadena): si se proporciona, devuelve el primer antepasado del elemento dado.eq (número): si se proporciona, seleccionará el enésimo elemento.texteq (número): si se proporciona, seleccionará el enésimo niño directo. El texto profundo la selección de niños aún no es posible. Sobrescribe la clave how .listItem (objeto): un objeto, manteniendo el esquema recursivo del objeto listItem . Esto se puede usar para crear listas anidadas.Ejemplo :
{
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
}
}
}
} Si desea recopilar datos específicos de la página, simplemente use el mismo esquema utilizado para el campo data .
Ejemplo :
{
title : ".header h1"
, desc : ".header h2"
, avatar : {
selector : ".header img"
, attr : "src"
}
} ¿Tienes una idea? Encontrado un error? Vea cómo contribuir.
De código abierto casi todo lo que pueda, y trato de responder a todos los que necesitan ayuda para usar estos proyectos. Obviamente, esto lleva tiempo. ¡Puede integrar y usar estos proyectos en sus aplicaciones de forma gratuita ! Incluso puede cambiar el código fuente y redistribuir (incluso revenderlo).
Sin embargo, si obtienes algunas ganancias de esto o simplemente quieres alentarme a continuar creando cosas, hay pocas formas en que puedes hacerlo:
Protagonizar y compartir los proyectos que te gustan
—El lo amo a los libros! Te recordaré después de años si me compras uno. ?
—Se puede hacer donaciones únicas a través de PayPal. Probablemente compraré un café té. ?
—Enea una donación mensual recurrente y obtendrá noticias interesantes sobre lo que estoy haciendo (cosas que no comparto con todos).
Bitcoin : puede enviarme bitcoins a esta dirección (o escanear el código a continuación): 1P9BRsmazNQcuyTxEqveUsnf5CERdq35V6
¡Gracias! ❤️
Si está utilizando esta biblioteca en uno de sus proyectos, agrégala en esta 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