Epublifier - Çevrimdışı okuma için sayfa (kitap, kılavuz) scraping aracı
(github.com/maoserr)- Epublifier, bir web sitesindeki HTML sayfa listesini çıkarıp bunu bir ePub kitabı olarak derleyen ve kullanıcının seçtiği eReader'a aktarmasını sağlayan bir tarayıcı eklentisidir
- JavaScript yazabilen ileri düzey kullanıcılar, belirli sitelerin ayrıştırma biçimini özelleştirmek için ek parser tanımları ekleyebilir
- Desteklenenler arasında Novel Update, Wuxia World, awesome-read-the-docs içindeki çok sayıda site, UL/OL içindekiler tablosu·bağlantı metni regex'i·query selector tabanlı özel siteler ve başlık öğesi ile Next düğmesi bulunan özel web uygulamaları yer alır
- Tarayıcı içinde çalıştığı için JavaScript ile dinamik olarak metin üreten veya getiren sitelerde de sayfaları işleyebilir ve fare tıklamalarıyla temel öğeleri seçmeye dayalı UI tabanlı scraping sunar
- Amaç, tekrar eden arka plan işleri ya da dayanıklı, özel amaçlı scraper'lar değildir; başka programların zaten iyi işlediği sitelerde, özel ayarlı araçlardan daha iyi performans beklemek zordur
Epublifier ne yapar
- Epublifier, web sitelerini ePub'a dönüştüren bir araçtır
- Web sitesinden HTML sayfa listesini çıkarır, bunu bir ePub kitabı olarak derler ve kullanıcının istediği eReader'a aktarmasını sağlar
- JavaScript yazabilen kullanıcılar, ek parser tanımları ekleyerek herhangi bir sitenin ayrıştırmasını özelleştirebilir
- Kullanım şekli wiki üzerinden görülebilir
Desteklenen siteler ve sayfa yapıları
- Şu anda desteklenenler şunlardır
-
Novel Update
-
Wuxia World
- awesome-read-the-docs içinde yer alan çok sayıda site
- UL/OL öğelerini içindekiler tablosu olarak kullanan özel siteler
- Bağlantı metni için regex veya query selector kullanan özel siteler
- Önceden tanımlanmış başlık (header) öğesi ve tıklanabilir bir Next düğmesi bulunan özel web uygulamaları
-
Kurulum
- Firefox eklentisi Firefox Add-ons üzerinden kurulabilir
- Chrome eklentisi Chrome Web Store üzerinden kurulabilir
Kullanım örnekleri
- Novel Update üzerinde sayfa listesi çıkarma örneği bulunur
- Wuxia World üzerinde Next düğmesini takip ederek web uygulamasında gezinme örneği bulunur
- FastAPI dokümantasyonu gibi diğer belge sitelerinde belge çıkarma örneği bulunur
Neden tarayıcı eklentisi olarak yapıldı
- Bu araç, geleneksel istek tabanlı CLI betikleri ya da açık sekmeler/pencereler üzerinden kazıma yapan bazı Chrome eklentileriyle iyi scrape edilemeyen web sitelerinde geçici ePub üretimi yapmak için tasarlanmıştır
- Mevcut CLI scraper'lar veya diğer eklentiler genellikle önceden tanımlı sitelere göre ayarlanmıştır ve bunun dışındaki sitelere uygun olmayabilir
- Bazı araçlar kayda değer miktarda yapılandırma veya kod yazımı gerektirir
- Bazı siteler metni JavaScript ile dinamik olarak üretir veya getirir; bu yüzden tarayıcının JavaScript çalıştırması gerekir
- Epublifier'ı yapma ihtiyacını doğuran en büyük boşluk buydu
- Tarayıcı içinde çalıştığı için tespit edilme veya engellenme olasılığı daha düşük olabilir
Hedeflenen kullanım biçimi ve sınırlamalar
- Epublifier, dayanıklı bir scraper veya tekrar eden arka plan zamanlanmış işleri için tasarlanmış bir araç değildir
- Scrape edilecek temel öğelerin UI üzerinden seçilmesinin nedeni de bu kullanım biçimiyle bağlantılıdır
- Siteye özel ayarlar olmasa bile, birkaç fare tıklamasıyla nispeten kolay biçimde içerik alabilmek için genel kullanım hedeflenmiştir
- Eğer bir siteyi başka programlar veya eklentiler zaten iyi işliyorsa, bu araçlar o siteye göre ayarlı olduğundan Epublifier daha iyi çalışmayacaktır
- Kodlama veya yapılandırmaya çok zaman harcamadan bir siteyi bir ya da iki kez scrape etmek isteyenlere yöneliktir
Build
- Build ortamı Windows 10 ve NPM 8.1.2'dir
- Build adımları şöyledir
- NPM kurun
- Ana dizinde
npm installçalıştırın - Firefox için
npm run build_ffçalıştırın - Chrome için
npm run buildçalıştırın
Kullanılan bileşenler
- ePub oluşturma için jEpub kullanılır
1 yorum
Hacker News yorumları
Bu eklentiyi diğer kazıyıcılardan ayıran şey, geleneksel kazıyıcılarla iyi kazınamayan sitelerde geçici olarak EPUB oluşturmak için bir araç olması.
Genellikle komut satırı kazıyıcılarında veya diğer eklentilerde desteklenen siteler önceden belirlenmiş olur ya da epey ayar/kod gerekir.
Ayrıca bazı siteler ana metni JavaScript ile dinamik olarak oluşturduğu veya getirdiği için tarayıcının JavaScript’i doğrudan çalıştırması gerekir; en büyük boşluk da buydu.
Tarayıcı içinde çalıştığından tespit edilme/engellenme olasılığı da daha düşük olabilir.
Tekrarlanan arka plan zamanlanmış işleri gibi sağlam biçimde kullanılmak üzere tasarlanmadı; bu yüzden kazınacak temel öğeleri seçmek için bir UI’si var.
Belirli siteye özel ayarlar olmadan, birkaç fare tıklamasıyla bir iki kez kazıma yaparken daha az zaman harcatmayı amaçlayan bir araç; başka bir program/eklenti bir siteyi zaten iyi işliyorsa o daha iyi bir seçenek olacaktır.
Aynı sitede uzun süre kalma eğiliminde olmadığım için yaptım.
Benzer bir şeyi kendim yapmış biri olarak, bu araçta ilginç olan kısım, rastgele sitelerden içerik çıkarımını yinelemeli biçimde ayarlamaya yarayan UI.
Çıkarma sürecinin tamamının GUI ile ele alınabilmesi, yaygın yöntemden çok daha esnek.
Tüm bölümler, açılmadan görünmeyen akordeon UI arkasındaysa ve birini açınca diğer bölümler kapanan siteleri bile işleyebiliyorsa gerçekten harika olurdu.
Şu anda ben de çok benzer bir şey geliştiriyorum.
Bloglar ve ağırlıklı olarak web romanları vb. için bir web scraper ve EPUB ayrıştırıcısı yapıyor, verileri kategori ve etiketlerle birlikte veritabanına kaydediyorum.
Birden çok eserde okuma ilerlemesini izleyen ve aynı hikâyenin birden çok sürümünü (web romanı ve yayımlanmış EPUB) saklamaya imkân veren çevrimdışı okuma için bir PWA da geliştiriyorum.
Calibre inanılmaz sayıda siteyi destekliyor.
https://github.com/JimmXinu/FanFicFare
https://github.com/JimmXinu/FanFicFare/wiki/SupportedSites
Eskiden blogları Kindle’a göndermek için benzer bir Kindle-send[0] yapmıştım; içeride readability kullanıyor.
Şimdi blog, kitap ve bazen tüm web sitesi arşivlerini göndermek için kullanıyorum; betiklerden de kullanılabiliyor.
Kindle vurgularını Obsidian’a dışa aktarabildiğim için, bu tür EPUB’lar oluşturunca vurguları tek yerde toplama avantajı oluyor.
Adı kindle-send ama kitap gönderim yöntemi olarak e-posta kullanan herhangi bir e-kitap okuyucuya gönderebilir.
[0] https://github.com/nikhil1raghav/kindle-send
Benzer bir şeyi Unix terminali için, web sayfaları/Gopher/Gemini hedefli olarak yapmıştım: Offpunk
https://sr.ht/~lioploum/offpunk/
EPUB yerine Gopher metin dosyası, Gemini Gemini dosyası, web sayfaları ise HTML+görseller olarak önbelleğe kaydediliyor.
~/.cache/offpunkiçinde hiyerarşik yapıyı görebilir veya doğrudan Offpunk’tan ziyaret edebilirsiniz.tourözelliğini kullanırsanız doomscrolling yerine tüm yazıları metin modunda sırayla sonuna kadar okursunuz.Epublifier’a benzer birkaç araç var.
https://epub.press/
https://github.com/dteviot/WebToEpub
https://dotepub.com/
Temiz.
Eskiden bu fikrin basit bir sürümünü yapıp EPUB dosyalarını sunucu dosya sistemine kaydediyor, sonra bunu e-kitap okuyucumla senkronize ediyordum.
https://github.com/solarkraft/webpub
Temel bileşen, web sitesini basitleştirilmiş bir “belge” görünümüne dönüştüren Postlight Parser.
http://fanfiction.net/ de destekleniyor mu? Bu site için kolay bir çözüm bulamadım.
Bir yere kadar çalışıyor ama bazı hikâyelerde iyi çalışırken bazılarında yalnızca ilk sayfayı alıyor.
İçeriği almak için headless tarayıcı kullanmak dışında iyi çalışan bir yaklaşım görmedim.