5 คะแนน โดย GN⁺ 2024-10-22 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • Epublifier เป็นส่วนขยายเบราว์เซอร์ที่ดึงรายการหน้า HTML จากเว็บไซต์ คอมไพล์เป็นหนังสือ ePub และให้ผู้ใช้นำไปใส่ใน eReader ที่เลือกได้
  • ผู้ใช้ขั้นสูงที่เขียน JavaScript ได้สามารถเพิ่ม parser definition เพื่อปรับแต่งวิธีพาร์สสำหรับเว็บไซต์เฉพาะได้
  • รองรับ Novel Update, Wuxia World, เว็บไซต์จำนวนมากใน awesome-read-the-docs, เว็บไซต์แบบกำหนดเองที่ใช้สารบัญ UL/OL · regex กับข้อความลิงก์ · query selector และ เว็บแอปแบบกำหนดเอง ที่มีองค์ประกอบชื่อเรื่องและปุ่ม Next
  • เนื่องจากทำงานในเบราว์เซอร์ จึงประมวลผลหน้าเว็บจากเว็บไซต์ที่สร้างหรือดึงข้อความแบบไดนามิกด้วย JavaScript ได้ และมี การสแครปผ่าน UI ที่ให้เลือกองค์ประกอบหลักด้วยการคลิกเมาส์
  • ไม่ได้มีเป้าหมายเพื่อเป็นงานเบื้องหลังที่รันซ้ำ ๆ หรือสแครปเปอร์เฉพาะทางที่ทนทาน และสำหรับเว็บไซต์ที่โปรแกรมอื่นจัดการได้ดีอยู่แล้ว ก็ยากที่จะคาดหวังประสิทธิภาพที่ดีกว่าเครื่องมือที่มีการตั้งค่าเฉพาะ

Epublifier ทำอะไร

  • Epublifier เป็นเครื่องมือสำหรับแปลงเว็บไซต์เป็น ePub
  • ดึงรายการหน้า HTML จากเว็บไซต์ แล้วคอมไพล์เป็นหนังสือ ePub เพื่อให้ผู้ใช้นำไปใส่ใน eReader ที่ต้องการได้
  • ผู้ใช้ที่เขียน JavaScript ได้สามารถเพิ่ม parser definition เพื่อปรับแต่งการพาร์สเว็บไซต์ใด ๆ ได้
  • ดูวิธีใช้งานได้ที่ wiki

เว็บไซต์และโครงสร้างหน้าที่รองรับ

  • ปัจจุบันรองรับดังต่อไปนี้
    • Novel Update

    • Wuxia World

      • เว็บไซต์จำนวนมากที่อยู่ใน awesome-read-the-docs
      • เว็บไซต์แบบกำหนดเองที่ใช้ element UL/OL เป็นสารบัญ
      • เว็บไซต์แบบกำหนดเองที่ใช้ regex หรือ query selector กับข้อความลิงก์
      • เว็บแอปแบบกำหนดเอง ที่มีองค์ประกอบหัวเรื่อง (header) ที่กำหนดไว้ล่วงหน้า และมีปุ่ม Next ที่คลิกได้

การติดตั้ง

  • ส่วนขยาย Firefox ติดตั้งได้จาก Firefox Add-ons
  • ส่วนขยาย Chrome ติดตั้งได้จาก Chrome Web Store

ตัวอย่างการใช้งาน

  • มีตัวอย่าง การดึงรายการหน้า จาก Novel Update
  • มีตัวอย่างการตามปุ่ม Next ใน Wuxia World เพื่อ ไล่ดูเว็บแอป
  • มีตัวอย่าง การดึงเอกสาร จากเว็บไซต์เอกสารอื่น ๆ เช่นเอกสาร FastAPI

เหตุผลที่ทำเป็นส่วนขยายเบราว์เซอร์

  • เครื่องมือนี้มีไว้สำหรับ สร้าง ePub แบบเฉพาะกิจ จากเว็บไซต์ที่สแครปได้ไม่ดีด้วยสคริปต์ CLI แบบ request-based ดั้งเดิม หรือส่วนขยาย Chrome บางตัวที่สแครปจากแท็บ/หน้าต่างที่เปิดอยู่
  • สแครปเปอร์ CLI หรือส่วนขยายอื่น ๆ ที่มีอยู่มักปรับให้เข้ากับเว็บไซต์ที่กำหนดไว้ล่วงหน้า และอาจไม่เหมาะกับเว็บไซต์ที่อยู่นอกขอบเขตนั้น
  • เครื่องมือบางตัวต้องตั้งค่าหรือเขียนโค้ดไม่น้อย
  • บางเว็บไซต์สร้างหรือดึงข้อความแบบไดนามิกด้วย JavaScript จึงจำเป็นต้องให้เบราว์เซอร์รัน JavaScript
    • จุดนี้คือช่องว่างสำคัญที่สุดที่ทำให้สร้าง Epublifier ขึ้นมา
  • เนื่องจากทำงานในเบราว์เซอร์ จึงอาจมีโอกาสถูกตรวจจับหรือบล็อกน้อยลง

วิธีใช้งานที่ตั้งใจไว้และข้อจำกัด

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

การบิลด์

  • สภาพแวดล้อมบิลด์คือ Windows 10 และ NPM 8.1.2
  • ขั้นตอนการบิลด์มีดังนี้
    • ติดตั้ง NPM
    • รัน npm install ในไดเรกทอรีหลัก
    • รัน npm run build_ff สำหรับ Firefox
    • รัน npm run build สำหรับ Chrome

คอมโพเนนต์ที่ใช้

  • ใช้ jEpub สำหรับการสร้าง ePub

1 ความคิดเห็น

 
GN⁺ 2024-10-22
ความคิดเห็นจาก Hacker News
  • เหตุผลที่ส่วนขยายนี้ต่างจากสแครปเปอร์ตัวอื่น ๆ คือมันเป็นเครื่องมือสำหรับ สร้าง EPUB แบบเฉพาะกิจ จากไซต์ที่สแครปด้วยสแครปเปอร์แบบดั้งเดิมได้ไม่ดี
    โดยปกติสแครปเปอร์บน command line หรือส่วนขยายอื่น ๆ มักมีไซต์ที่รองรับกำหนดไว้ล่วงหน้า หรือต้องตั้งค่า/เขียนโค้ดค่อนข้างมาก
    อีกทั้งบางไซต์สร้างหรือดึงเนื้อหาแบบไดนามิกด้วย JavaScript จึงต้องให้เบราว์เซอร์รัน JavaScript เอง ซึ่งเป็นช่องว่างที่ใหญ่ที่สุด
    เพราะมันทำงานอยู่ในเบราว์เซอร์ โอกาสถูกตรวจจับหรือบล็อกก็อาจต่ำกว่า
    จุดประสงค์ไม่ใช่ให้ใช้แบบทนทานเหมือนงานเบื้องหลังที่ตั้งเวลาให้รันซ้ำ ๆ ดังนั้นจึงมี UI สำหรับเลือกองค์ประกอบหลักที่จะสแครป
    เป็นเครื่องมือที่ตั้งใจลดเวลาสำหรับการสแครปครั้งเดียวหรือสองครั้งด้วยการคลิกเมาส์ไม่กี่ครั้ง โดยไม่ต้องมีการตั้งค่าสำหรับไซต์เฉพาะ และถ้าเป็นไซต์ที่โปรแกรมหรือส่วนขยายอื่นจัดการได้ดีอยู่แล้ว ใช้เครื่องมือพวกนั้นน่าจะดีกว่า
    ผมสร้างมันขึ้นมาเพราะผมไม่ค่อยอยู่กับไซต์เดิมนาน ๆ

  • ในฐานะคนที่เคยทำของคล้าย ๆ กันเอง ส่วนที่น่าสนใจของเครื่องมือนี้คือ UI สำหรับปรับกระบวนการดึงเนื้อหาจากไซต์ใด ๆ ซ้ำ ๆ
    การจัดการกระบวนการดึงข้อมูลทั้งหมดผ่าน GUI ทำให้ยืดหยุ่นกว่าวิธีทั่วไปมาก

  • ถ้าจัดการไซต์ที่ทุกส่วนซ่อนอยู่หลัง accordion UI และต้องกางออกถึงจะเห็น แถมเมื่อกางส่วนหนึ่งแล้วส่วนอื่นพับกลับ ได้ก็คงเจ๋งมาก

    • ในกรณีของผม มันใช้ได้กับไซต์นี้: https://docs.ray.io/en/latest/
    • ลบป๊อปอัปอย่างจดหมายข่าว การสมัครสมาชิก การเข้าสู่ระบบ และการแจ้งเตือนคุกกี้ได้ไหม? อ่านหน้าที่ต้องเข้าสู่ระบบได้ไหม?
  • ตอนนี้ผมก็กำลังทำของที่คล้ายกันมากอยู่
    สร้าง เว็บสแครปเปอร์ และตัวแยกวิเคราะห์ EPUB สำหรับบล็อกและโดยหลัก ๆ คือเว็บโนเวล แล้วบันทึกข้อมูลลงฐานข้อมูลพร้อมหมวดหมู่และแท็ก
    รวมถึงทำ PWA สำหรับอ่านออฟไลน์ที่ช่วยติดตามความคืบหน้าในการอ่านหลาย ๆ เรื่อง และเก็บหลายเวอร์ชันของเรื่องเดียวกันได้ เช่น เว็บโนเวลกับ EPUB ฉบับตีพิมพ์

  • Calibre รองรับไซต์จำนวนมหาศาล
    https://github.com/JimmXinu/FanFicFare
    https://github.com/JimmXinu/FanFicFare/wiki/SupportedSites

  • ก่อนหน้านี้ผมเคยทำ Kindle-send[0] ที่คล้ายกันเพื่อส่งบล็อกไปยัง Kindle และภายในใช้ readability
    ตอนนี้ใช้ส่งบล็อก หนังสือ และบางครั้งก็อาร์ไคฟ์ทั้งเว็บไซต์ได้ด้วย และยังใช้จากสคริปต์ได้
    เพราะสามารถส่งออกไฮไลต์จาก Kindle ไปยัง Obsidian ได้ การสร้าง EPUB แบบนี้จึงมีข้อดีคือรวมไฮไลต์ไว้ในที่เดียวได้
    แม้ชื่อจะเป็น kindle-send แต่ถ้าเป็น e-book reader ที่ใช้อีเมลเป็นวิธีส่งหนังสือ ก็ส่งไปได้หมด
    [0] https://github.com/nikhil1raghav/kindle-send

  • ผมเคยทำของคล้ายกันสำหรับเทอร์มินัล Unix โดยรองรับเว็บเพจ, Gopher และ Gemini: Offpunk
    https://sr.ht/~lioploum/offpunk/
    แทนที่จะเป็น EPUB แคชจะเก็บ Gopher เป็นไฟล์ข้อความ, Gemini เป็นไฟล์ Gemini และเว็บเพจเป็น HTML+รูปภาพ
    สามารถดูโครงสร้างแบบลำดับชั้นได้ใน ~/.cache/offpunk หรือเปิดดูโดยตรงใน Offpunk
    ถ้าใช้ฟีเจอร์ tour ก็จะอ่านบทความทั้งหมดเรียงกันจนจบในโหมดข้อความ แทนการ doomscrolling

  • มีเครื่องมือบางตัวที่คล้ายกับ Epublifier
    https://epub.press/
    https://github.com/dteviot/WebToEpub
    https://dotepub.com/

  • เรียบร้อยดี
    เมื่อก่อนผมเคยทำเวอร์ชันเรียบง่ายของแนวคิดนี้ โดยบันทึกไฟล์ EPUB ไว้ในระบบไฟล์ของเซิร์ฟเวอร์ แล้วซิงก์กับ e-book reader ของผม
    https://github.com/solarkraft/webpub
    ส่วนประกอบหลักคือ Postlight Parser ที่แปลงเว็บไซต์ให้เป็นมุมมอง “เอกสาร” แบบเรียบง่าย

  • รองรับ http://fanfiction.net/ ด้วยไหม? ผมหาวิธีง่าย ๆ สำหรับไซต์นี้ไม่เจอ

    • ส่งออกเป็น EPUB ได้จาก https://fichub.net/
    • ใช้ปลั๊กอินของ Calibre: https://www.mobileread.com/forums/showthread.php?t=259221
      ใช้ได้ในระดับหนึ่ง แต่บางเรื่องก็ทำงานดี ส่วนบางเรื่องดึงมาแค่หน้าแรก
    • ตัว Fanfiction.net เองนั้นเรียบง่าย แต่เปิด การบล็อกบอตของ Cloudflare ไว้ค่อนข้างเข้มงวด
      ถ้าจะดึงเนื้อหา ผมยังไม่เห็นวิธีที่ใช้งานได้ดีนอกจากใช้เบราว์เซอร์แบบ headless
    • สามารถดึงลิงก์ของทุกบทเป็น CSV ได้ และโครงสร้าง URL ดูเหมือนแค่เพิ่มตัวเลขขึ้นไป