مكشطة node.js للبشر.
برعاية ❤ بواسطة:
Capsolver.com هي خدمة تعمل بذات AI وهي متخصصة في حل أنواع مختلفة من Captchas تلقائيًا. وهو يدعم Captchas مثل Recaptcha V2 و Recaptcha V3 و Hcaptcha و Funcaptcha و Datadome و AWS Captcha و Geetest و Cloudflare Captcha / Challenge 5S ، Imperva / Incapsula ، من بين أمور أخرى. للمطورين ، يقدم Capsolver خيارات تكامل API مفصلة في وثائقهم ، مما يسهل دمج حل Captcha في التطبيقات. كما أنها توفر ملحقات المتصفح لـ Chrome و Firefox ، مما يجعل من السهل استخدام خدمتهم مباشرة داخل المتصفح. تتوفر حزم التسعير المختلفة لتلبية الاحتياجات المختلفة ، مما يضمن المرونة للمستخدمين.
# Using npm
npm install --save scrape-it
# Using yarn
yarn add scrape-it Protip : يمكنك تثبيت إصدار CLI من هذه الوحدة عن طريق تشغيل npm install --global scrape-it-cli (أو yarn global add scrape-it-cli ).
فيما يلي بعض الأسئلة المتكررة وإجاباتهم.
scrape-it يحتوي على وحدة طلب بسيطة فقط لتقديم الطلبات. هذا يعني أنه لا يمكنك تحليل صفحات Ajax مباشرة معها ، ولكن بشكل عام سيكون لديك هذه السيناريوهات:
scrape-it URL AJAX (على سبيل المثال example.com/api/that-endpoint ) وستتمكن من تحليل الاستجابة.scrapeHTML من كشطه بمجرد تحميل HTML على الصفحة. لا توجد طريقة خيالية لزحف الصفحات مع scrape-it . للحصول على سيناريوهات بسيطة ، يمكنك تحليل قائمة عناوين URL من الصفحة الأولية ، وبعد ذلك ، باستخدام الوعود ، تحليل كل صفحة. أيضًا ، يمكنك استخدام زاحف مختلف لتنزيل موقع الويب ثم استخدام طريقة .scrapeHTML لكشط الملفات المحلية.
استخدم .scrapeHTML لتحليل قراءة HTML من الملفات المحلية باستخدام 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' }
} ) ( ) هناك طرق قليلة للحصول على المساعدة:
scrapeIt(url, opts, cb)وحدة كشط للبشر.
url للكائن: عنوان URL أو خيارات الطلب.opts : تم تمرير الخيارات إلى طريقة scrapeHTML .cb : وظيفة رد الاتصال. data (كائن): البيانات المكثفة.$ (وظيفة): وظيفة cheeerio. قد يكون هذا مفيدًا للقيام ببعض التلاعب الآخر على DOM ، إذا لزم الأمر.response (كائن): كائن الاستجابة.body (سلسلة): الجسم الخام كسلسلة.scrapeIt.scrapeHTML($, opts)قم بإخلاص البيانات في العنصر المقدم.
لتنسيق المحدد ، يرجى الرجوع إلى قسم المحددات في مكتبة Cheerio
Cheerio $ : عنصر الإدخال.
كائن opts : كائن يحتوي على معلومات التجريف. إذا كنت تريد كشافة قائمة ، فيجب عليك استخدام محدد listItem :
listItem (سلسلة): محدد عنصر القائمة.data (كائن): الحقول لتضمينها في الكائنات القائمة:<fieldName> (كائن | سلسلة): المحدد أو كائن يحتوي على:selector (سلسلة): المحدد.convert (وظيفة): وظيفة اختيارية لتغيير القيمة.how (وظيفة | سلسلة): اسم دالة أو وظيفة للوصول إلى القيمة.attr (سلسلة): إذا تم توفيرها ، فسيتم أخذ القيمة بناءً على اسم السمة.trim (منطقي): إذا كان false ، فلن يتم قطع القيمة (افتراضي: true ).closest (سلسلة): إذا تم توفيرها ، فإن إرجاع الجد الأول للعنصر المعطى.eq (الرقم): إذا تم توفيره ، فسيتم تحديد العنصر التاسع .texteq (الرقم): إذا تم توفيره ، فسيختار NTH Direct Text Child. النص العميق اختيار الطفل غير ممكن بعد. الكتابة فوق how المفتاح.listItem (كائن): كائن ، والحفاظ على المخطط العودية لكائن listItem . يمكن استخدام هذا لإنشاء قوائم متداخلة.مثال :
{
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
}
}
}
} إذا كنت ترغب في جمع بيانات محددة من الصفحة ، فما عليك سوى استخدام نفس المخطط المستخدم لحقل data .
مثال :
{
title : ".header h1"
, desc : ".header h2"
, avatar : {
selector : ".header img"
, attr : "src"
}
} هل لديك فكرة؟ وجدت خطأ؟ انظر كيف تساهم.
أنا مفتوح المصدر تقريبًا كل ما بوسعي ، وأحاول الرد على كل من يحتاج إلى مساعدة في استخدام هذه المشاريع. من الواضح أن هذا يستغرق بعض الوقت. يمكنك دمج هذه المشاريع واستخدامها في تطبيقاتك مجانًا ! يمكنك حتى تغيير التعليمات البرمجية المصدر وإعادة توزيعها (حتى إعادة بيعها).
ومع ذلك ، إذا حصلت على بعض الأرباح من هذا أو ترغب فقط في تشجيعني على مواصلة إنشاء الأشياء ، فهناك بعض الطرق التي يمكنك من خلالها القيام بذلك:
بطولة ومشاركة المشاريع التي تحبها
- أحب الكتب! سوف أتذكرك بعد سنوات إذا اشتريت لي واحدة. ؟
-يمكنك تقديم تبرعات لمرة واحدة عبر PayPal. ربما سأشتري أ قهوة شاي. ؟
- قم بإجراء تبرع شهري متكرر وستحصل على أخبار مثيرة للاهتمام حول ما أقوم به (أشياء لا أشاركها مع الجميع).
Bitcoin - يمكنك أن ترسل لي Bitcoins على هذا العنوان (أو مسح الكود أدناه): 1P9BRsmazNQcuyTxEqveUsnf5CERdq35V6
شكرًا! ❤
إذا كنت تستخدم هذه المكتبة في أحد مشاريعك ، فأضفها في هذه القائمة.
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