Scraper node.js untuk manusia.
Disponsori dengan ❤️ oleh:
Capsolver.com adalah layanan bertenaga AI yang berspesialisasi dalam memecahkan berbagai jenis captcha secara otomatis. Ini mendukung captcha seperti recaptcha v2, recaptcha v3, hcaptcha, funcaptcha, datadome, aws captcha, geetest, dan cloudflare captcha / tantangan 5s, imperva / incapsula, antara lain. Untuk pengembang, CapSolver menawarkan opsi integrasi API yang dirinci dalam dokumentasi mereka, memfasilitasi integrasi pemecahan CAPTCHA ke dalam aplikasi. Mereka juga menyediakan ekstensi browser untuk Chrome dan Firefox, membuatnya mudah untuk menggunakan layanan mereka langsung di dalam browser. Paket harga yang berbeda tersedia untuk mengakomodasi berbagai kebutuhan, memastikan fleksibilitas bagi pengguna.
# Using npm
npm install --save scrape-it
# Using yarn
yarn add scrape-it ProTip : Anda dapat menginstal versi CLI dari modul ini dengan menjalankan npm install --global scrape-it-cli (atau yarn global add scrape-it-cli ).
Berikut adalah beberapa pertanyaan dan jawaban mereka yang sering.
scrape-it hanya memiliki modul permintaan sederhana untuk membuat permintaan. Itu berarti Anda tidak dapat secara langsung menguraikan halaman AJAX dengan itu, tetapi secara umum Anda akan memiliki skenario itu:
scrape-it url AJAX (misalnya example.com/api/that-endpoint ) dan Anda akan dapat menguraikan tanggapan.scrapeHTML dari mengikisnya setelah Anda mendapatkan HTML yang dimuat pada halaman. Tidak ada cara mewah untuk merangkak halaman dengan scrape-it . Untuk skenario sederhana, Anda dapat menguraikan daftar URL dari halaman awal dan kemudian, menggunakan janji, parse setiap halaman. Juga, Anda dapat menggunakan crawler yang berbeda untuk mengunduh situs web dan kemudian menggunakan metode .scrapeHTML untuk mengikis file lokal.
Gunakan .scrapeHTML untuk mengurai HTML yang dibaca dari file lokal menggunakan 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' }
} ) ( ) Ada beberapa cara untuk mendapatkan bantuan:
scrapeIt(url, opts, cb)Modul gesekan untuk manusia.
url Objek: URL Halaman atau Opsi Permintaan.opts : Opsi yang diteruskan ke metode scrapeHTML .cb : Fungsi panggilan balik. data (objek): Data yang dikikis.$ (Fungsi): Fungsi Cheeerio. Ini mungkin berguna untuk melakukan beberapa manipulasi lain pada DOM, jika diperlukan.response (objek): Objek respons.body (string): Tubuh mentah sebagai string.scrapeIt.scrapeHTML($, opts)Mengikis data dalam elemen yang disediakan.
Untuk format pemilih, silakan merujuk ke bagian Selector dari Perpustakaan Cheerio
Cheerio $ : Elemen input.
Object opts : Objek yang berisi informasi pengikis. Jika Anda ingin mengikis daftar, Anda harus menggunakan pemilih listItem :
listItem (String): Pemilih Item Daftar.data (objek): Bidang yang akan disertakan dalam objek daftar:<fieldName> (Object | String): Pemilih atau objek yang berisi:selector (String): Pemilih.convert (fungsi): Fungsi opsional untuk mengubah nilai.how (Fungsi | String): Nama fungsi atau fungsi untuk mengakses nilai.attr (string): Jika disediakan, nilainya akan diambil berdasarkan nama atribut.trim (boolean): Jika false , nilainya tidak akan dipangkas (default: true ).closest (string): Jika disediakan, mengembalikan leluhur pertama dari elemen yang diberikan.eq (Nomor): Jika disediakan, itu akan memilih elemen ke -n .texteq (Nomor): Jika disediakan, itu akan memilih anak teks langsung ke -N . Pilihan anak yang dalam belum dimungkinkan. Menimpa how kunci.listItem (objek): Suatu objek, menjaga skema rekursif dari objek listItem . Ini dapat digunakan untuk membuat daftar bersarang.Contoh :
{
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
}
}
}
} Jika Anda ingin mengumpulkan data tertentu dari halaman, cukup gunakan skema yang sama yang digunakan untuk bidang data .
Contoh :
{
title : ".header h1"
, desc : ".header h2"
, avatar : {
selector : ".header img"
, attr : "src"
}
} Punya ide? Menemukan bug? Lihat cara berkontribusi.
Saya open-source hampir semua yang saya bisa, dan saya mencoba untuk membalas semua orang yang membutuhkan bantuan menggunakan proyek-proyek ini. Jelas, ini membutuhkan waktu. Anda dapat mengintegrasikan dan menggunakan proyek ini dalam aplikasi Anda secara gratis ! Anda bahkan dapat mengubah kode sumber dan mendistribusikan kembali (bahkan menjualnya kembali).
Namun, jika Anda mendapat untung dari ini atau hanya ingin mendorong saya untuk terus membuat barang, ada beberapa cara Anda dapat melakukannya:
Membintangi dan berbagi proyek yang Anda sukai
—Aku suka buku! Saya akan mengingat Anda setelah bertahun -tahun jika Anda membelikan saya satu. ?
—Anda dapat memberikan sumbangan satu kali melalui PayPal. Saya mungkin akan membeli kopi teh. ?
—Metikan sumbangan bulanan berulang dan Anda akan mendapatkan berita menarik tentang apa yang saya lakukan (hal -hal yang tidak saya bagikan dengan semua orang).
Bitcoin —Anda dapat mengirimi saya Bitcoin di alamat ini (atau memindai kode di bawah): 1P9BRsmazNQcuyTxEqveUsnf5CERdq35V6
Terima kasih! ❤️
Jika Anda menggunakan perpustakaan ini di salah satu proyek Anda, tambahkan dalam daftar ini.
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