Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ซอฟต์แวร์ >> เบราว์เซอร์

Web Scraping ที่มีประสิทธิภาพ:ใช้คอนโซลเบราว์เซอร์เพื่อแยกและจัดเก็บข้อมูลด้วย JavaScript

Web Scraping ที่มีประสิทธิภาพ:ใช้คอนโซลเบราว์เซอร์เพื่อแยกและจัดเก็บข้อมูลด้วย JavaScript

โดย ประวีณ ดูบีย์

เมื่อก่อนฉันต้องรวบรวมข้อมูลไซต์เพื่อหาลิงก์ และใช้ลิงก์หน้าเหล่านั้นเพิ่มเติมเพื่อรวบรวมข้อมูลโดยใช้ซีลีเนียมหรือนักเชิดหุ่น การตั้งค่าเนื้อหาบนไซต์ค่อนข้างแปลก ดังนั้นฉันจึงไม่สามารถเริ่มต้นด้วยซีลีเนียมและโหนดโดยตรงได้ น่าเสียดายที่ข้อมูลบนเว็บไซต์มีขนาดใหญ่มาก ฉันต้องหาแนวทางอย่างรวดเร็วในการรวบรวมข้อมูลลิงก์ทั้งหมดก่อน และส่งต่อลิงก์เหล่านั้นเพื่อดูรายละเอียดการรวบรวมข้อมูลของแต่ละหน้า

นั่นคือที่ที่ฉันได้เรียนรู้สิ่งเจ๋งๆ นี้ด้วย Console API ของเบราว์เซอร์ คุณสามารถใช้สิ่งนี้บนเว็บไซต์ใดก็ได้โดยไม่ต้องตั้งค่ามากนัก เนื่องจากเป็นเพียง JavaScript

มาดูรายละเอียดทางเทคนิคกันดีกว่า

ภาพรวมระดับสูง

Web Scraping ที่มีประสิทธิภาพ:ใช้คอนโซลเบราว์เซอร์เพื่อแยกและจัดเก็บข้อมูลด้วย JavaScript

สำหรับการรวบรวมข้อมูลลิงก์ทั้งหมดบนหน้าเว็บ ฉันเขียน JS ส่วนเล็กๆ ไว้ในคอนโซล JavaScript นี้รวบรวมข้อมูลลิงก์ทั้งหมด (ใช้เวลา 1–2 ชั่วโมง เช่นเดียวกับการแบ่งหน้า) และทิ้ง 04 ไฟล์ที่มีข้อมูลที่รวบรวมข้อมูลทั้งหมด สิ่งที่ต้องจำไว้ก็คือ คุณต้องแน่ใจว่าเว็บไซต์ทำงานได้ คล้ายกับแอปพลิเคชันหน้าเดียว มิฉะนั้น หน้าดังกล่าวจะไม่โหลดซ้ำหากคุณต้องการรวบรวมข้อมูลมากกว่าหนึ่งหน้า หากไม่เป็นเช่นนั้น รหัสคอนโซลของคุณจะหายไป

สื่อไม่รีเฟรชเพจสำหรับบางสถานการณ์ สำหรับตอนนี้ มารวบรวมข้อมูลเรื่องราวและบันทึกข้อมูลที่คัดลอกมาในไฟล์จากคอนโซลโดยอัตโนมัติหลังจากการคัดลอก

แต่ก่อนที่เราจะทำเช่นนั้น นี่เป็นการสาธิตสั้นๆ ของการดำเนินการขั้นสุดท้าย

Web Scraping ที่มีประสิทธิภาพ:ใช้คอนโซลเบราว์เซอร์เพื่อแยกและจัดเก็บข้อมูลด้วย JavaScript สาธิต

1. รับอินสแตนซ์ออบเจ็กต์คอนโซลจากเบราว์เซอร์

// Console API to clear console before logging new data
console.API;
if (typeof console._commandLineAPI !== 'undefined') { console.API = console._commandLineAPI; //chrome
} else if (typeof console._inspectorCommandLineAPI !== 'undefined'){ console.API = console._inspectorCommandLineAPI; //Safari
} else if (typeof console.clear !== 'undefined') { console.API = console;
}

รหัสเพียงพยายามรับอินสแตนซ์วัตถุคอนโซลตามเบราว์เซอร์ปัจจุบันของผู้ใช้ คุณสามารถเพิกเฉยและกำหนดอินสแตนซ์ให้กับเบราว์เซอร์ของคุณได้โดยตรง

ตัวอย่าง หากคุณใช้ Chrome โค้ดด้านล่างควรจะเพียงพอ

if (typeof console._commandLineAPI !== 'undefined') { console.API = console._commandLineAPI; //chrome
}

2. การกำหนดฟังก์ชันผู้ช่วยรุ่นเยาว์

ฉันจะถือว่าคุณได้เปิดเรื่องราวขนาดกลางในเบราว์เซอร์ของคุณแล้ว บรรทัดที่ 6 ถึง 12 กำหนดแอตทริบิวต์องค์ประกอบ DOM ซึ่งสามารถใช้เพื่อแยก ชื่อเรื่องราว จำนวนการตบมือ ชื่อผู้ใช้ URL รูปภาพโปรไฟล์ คำอธิบายโปรไฟล์ และเวลาอ่านเรื่องราว ตามลำดับ

สิ่งเหล่านี้คือสิ่งพื้นฐานที่ฉันต้องการแสดงให้เห็นสำหรับเรื่องราวนี้ คุณสามารถเพิ่มองค์ประกอบเพิ่มเติมได้ เช่น การแยกลิงก์จากเรื่องราว รูปภาพทั้งหมด หรือลิงก์ที่ฝังไว้

3. การกำหนดฟังก์ชันผู้ช่วยอาวุโสของเรา — สัตว์ร้าย

ขณะที่เรากำลังรวบรวมข้อมูลหน้าสำหรับองค์ประกอบต่างๆ เราจะบันทึกไว้ในคอลเลกชัน คอลเลกชันนี้จะถูกส่งไปยังหนึ่งในฟังก์ชันหลัก

เราได้กำหนดชื่อฟังก์ชัน 12 . งานสำหรับฟังก์ชันนี้คือดัมพ์ไฟล์ csv / json ด้วยข้อมูลที่ส่งผ่าน

มันสร้าง Blob Object ด้วยข้อมูลของเรา 29 object แสดงถึงวัตถุที่มีลักษณะคล้ายไฟล์ของข้อมูลดิบที่ไม่เปลี่ยนรูป Blobs แสดงถึงข้อมูลที่ไม่จำเป็นต้องอยู่ในรูปแบบ JavaScript-native

สร้าง Blob แนบไปกับแท็กลิงก์ 34;a> ซึ่งเหตุการณ์การคลิกถูกทริกเกอร์

นี่คือการสาธิตสั้นๆ ของ 49 ด้วย 51 ขนาดเล็ก ส่งผ่านเป็นข้อมูล

Web Scraping ที่มีประสิทธิภาพ:ใช้คอนโซลเบราว์เซอร์เพื่อแยกและจัดเก็บข้อมูลด้วย JavaScript

เมื่อรวบรวมโค้ดทั้งหมดเข้าด้วยกัน นี่คือสิ่งที่เรามี:

  1. อินสแตนซ์ API ของคอนโซล
  2. ฟังก์ชันตัวช่วยในการแยกองค์ประกอบ
  3. ฟังก์ชันบันทึกคอนโซลเพื่อสร้างไฟล์

มาดำเนินการ console.save() ของเราในเบราว์เซอร์เพื่อบันทึกข้อมูลเป็นไฟล์ สำหรับสิ่งนี้ คุณสามารถไปที่เรื่องราวบน Medium และรันโค้ดนี้ในคอนโซลของเบราว์เซอร์

Web Scraping ที่มีประสิทธิภาพ:ใช้คอนโซลเบราว์เซอร์เพื่อแยกและจัดเก็บข้อมูลด้วย JavaScript

ฉันได้แสดงการสาธิตโดยดึงข้อมูลจากหน้าเดียว แต่โค้ดเดียวกันนี้สามารถปรับแต่งเพื่อรวบรวมข้อมูลหลายเรื่องราวจากหน้าแรกของผู้จัดพิมพ์ได้ ยกตัวอย่าง freeCodeCamp:คุณสามารถนำทางจากเรื่องหนึ่งไปอีกเรื่องหนึ่งแล้วกลับมา (โดยใช้ปุ่มย้อนกลับของเบราว์เซอร์) ไปยังหน้าแรกของผู้จัดพิมพ์โดยไม่ต้องรีเฟรชหน้า

ด้านล่างนี้คือโค้ดขั้นต่ำที่คุณต้องใช้เพื่อแยกเรื่องราวหลายเรื่องจากหน้าแรกของผู้จัดพิมพ์

มาดูการทำงานของโค้ดเพื่อรับคำอธิบายโปรไฟล์จากเรื่องราวต่างๆ กัน

Web Scraping ที่มีประสิทธิภาพ:ใช้คอนโซลเบราว์เซอร์เพื่อแยกและจัดเก็บข้อมูลด้วย JavaScript

สำหรับแอปพลิเคชันประเภทใดก็ตาม เมื่อคุณได้ทำลายข้อมูลแล้ว คุณสามารถส่งต่อไปยัง console.save ของเราได้ ฟังก์ชั่นและจัดเก็บไว้ในไฟล์

คุณสามารถแนบฟังก์ชันบันทึกคอนโซลเข้ากับโค้ดคอนโซลของคุณได้อย่างรวดเร็ว และสามารถช่วยคุณถ่ายโอนข้อมูลในไฟล์ได้ ฉันไม่ได้บอกว่าคุณมี เพื่อใช้คอนโซลในการดึงข้อมูล แต่บางครั้งนี่อาจเป็นวิธีที่เร็วกว่า เนื่องจากเราทุกคนคุ้นเคยกับการทำงานกับ DOM โดยใช้ตัวเลือก CSS

คุณสามารถดาวน์โหลดโค้ดได้จาก Github

ขอบคุณที่อ่านบทความนี้! หวังว่ามันจะทำให้คุณมีความคิดที่ดีในการขูดข้อมูลบางส่วนอย่างรวดเร็วโดยไม่ต้องตั้งค่าอะไรมากมาย กดปุ่มปรบมือถ้ามันสนุก! หากคุณมีคำถามใด ๆ โปรดส่งอีเมลถึงฉัน (praveend806 [at] gmail [dot] com)

แหล่งข้อมูลเพื่อเรียนรู้เพิ่มเติมเกี่ยวกับคอนโซล:

การใช้คอนโซล | เครื่องมือสำหรับนักพัฒนาเว็บ | นักพัฒนาซอฟต์แวร์ของ Google
_เรียนรู้วิธีใช้งานคอนโซล Chrome DevTools JavaScript._developers.google.comคอนโซลเบราว์เซอร์
_เบราว์เซอร์คอนโซลก็เหมือนกับเว็บคอนโซล แต่นำไปใช้กับเบราว์เซอร์ทั้งหมดแทนที่จะเป็นแท็บเนื้อหาเดียว_developer.mozilla.orgBlob
_A วัตถุ Blob แสดงถึงวัตถุที่มีลักษณะคล้ายไฟล์ของข้อมูลดิบที่ไม่เปลี่ยนรูป Blobs แสดงถึงข้อมูลที่ไม่จำเป็นต้องอยู่ใน..._developer.mozilla.org

เรียนรู้การเขียนโค้ดฟรี หลักสูตรโอเพ่นซอร์สของ freeCodeCamp ช่วยให้ผู้คนมากกว่า 40,000 คนได้งานในตำแหน่งนักพัฒนา เริ่มต้น