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 วัตถุ : ตัวเลือกที่ส่งผ่านไปยังวิธี scrapeHTMLcb : ฟังก์ชั่นการโทรกลับ data (วัตถุ): ข้อมูลที่ถูกคัดลอก$ (ฟังก์ชั่น): ฟังก์ชั่น Cheeerio สิ่งนี้อาจมีประโยชน์ในการจัดการอื่น ๆ ใน DOM หากจำเป็นresponse (วัตถุ): วัตถุตอบสนองbody (สตริง): ร่างกายดิบเป็นสตริงscrapeIt.scrapeHTML($, opts)ขูดข้อมูลในองค์ประกอบที่ให้ไว้
สำหรับรูปแบบของตัวเลือกโปรดดูส่วนตัวเลือกของไลบรารี Cheerio
Cheerio $ : องค์ประกอบอินพุต
opts วัตถุ : วัตถุที่มีข้อมูลการขูด หากคุณต้องการขูดรายชื่อคุณต้องใช้ตัวเลือก listItem :
listItem (สตริง): รายการตัวเลือกรายการdata (วัตถุ): ฟิลด์ที่จะรวมไว้ในรายการรายการ:<fieldName> (วัตถุ | สตริง): ตัวเลือกหรือวัตถุที่มี:selector (สตริง): ตัวเลือกconvert (ฟังก์ชั่น): ฟังก์ชั่นเสริมเพื่อเปลี่ยนค่าhow (ฟังก์ชั่น | สตริง): ชื่อฟังก์ชันหรือชื่อฟังก์ชันเพื่อเข้าถึงค่าattr (สตริง): หากมีให้ค่าจะถูกนำไปใช้ตามชื่อแอตทริบิวต์trim (บูลีน): ถ้า false ค่าจะ ไม่ถูก ตัดแต่ง (ค่าเริ่มต้น: true )closest (สตริง): หากมีให้ส่งคืนบรรพบุรุษแรกขององค์ประกอบที่กำหนดeq (หมายเลข): หากมีให้มันจะเลือกองค์ประกอบ nthtexteq (หมายเลข): หากมีให้มันจะเลือกเด็กข้อความโดยตรง nth การเลือกเด็กที่ลึกลงไปยังไม่สามารถทำได้ เขียนทับกุญแจ howlistItem (วัตถุ): วัตถุ, รักษาสคีมาแบบเรียกซ้ำของวัตถุ 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