2019年12月21日 星期六

ccal自製有農曆的日曆

摘要

自己已連續好幾年都使用“自製有農曆的日曆”這個網站來產生月曆,原本使用它的網頁功能,近年改用該網站的後端程式(ccal.exe),直接在自己電腦中做。

本文簡單介紹一下這網站與其後端程式的使用。如果發現該網站上有許多頁面連結失效,先別慌,先複製所要的連結網址,瀏覽器開新空白頁,貼上網址即可。

2019年12月14日 星期六

以Python與無頭式Firefox或Chrome做網頁抓取

前言

以程式來抓取網頁內容從中取得有用資料的工作早已不是件困難的事,而現代網頁的產生方式也有許多種方式,其中一種是執行過JavaScript才產生的。這類網頁在程式中僅由一般取得靜態網頁的方式來取得是行不通的,必須透過像瀏覽器的運作,執行過其中的JavaScript後,真正的網頁內容才會產生。

若要以Python抓取由JavaScript所產生的網頁內容,有一種作法是透過Selenium[1],驅動瀏覽器來進行。Selenuim支援多種瀏覽器,其中包含了Firefox, Google Chrome。但在某些應用的環境中,啟動瀏覽器來抓資料可能不太適合,因為桌面環境就不方便同時再進行其他工作,或是根本沒桌面環境可用。在這種情況下,像PhantomJS這類無需圖形環境的Scriptable Headless Browser[2],無頭(意指沒有圖形畫面顯示)的瀏覽器就相當適合,而Selenuim也支援它。以往PhantomJS在這方面使用的領域佔有重要的一席之地,自己也用了很長一段時間,且得心應手。只是Selenuim後來的版本因某些因素不再支援它,想用Headless瀏覽器,得改用其他像Firefox Headless Mode或是Chrome Headless Mode。

本文簡單記錄Python中以Selenuim驅動Headless Firefox/Chrome的方式、幾點相關建議、提醒以及相關參考。不涉及Selenium與Headless Browser之詳細用途說明,這類請查閱後面所列的參考。內容僅屬粗淺的入門指引,也算不上教學文,文末所列的參考可查到這方面詳細資料。

本文適合的讀者對象是已經會使用Python來抓取一般網頁,但對於以JavaScript或Ajax所產生的網頁資料一籌莫展者。要做這工作,最好熟悉HTML,能懂點JavaScript更好,會使用瀏覽器的開發者工具來檢視HTML元素可方便鎖定想找的東西,以及瀏覽器主控台。

如果想學習如何以Python抓取網頁資料(俗稱網路爬蟲),市面上已有數本這類書籍,像Web Scraping with Python。有Python基礎者可利用Requests, Beautiful Soup, lxml(選項)的組合,或者Scrapy來達成一般的網頁抓取工作,前者的組合可做一般應用也可做爬蟲,較容易入手;Scrapy則專門用於建構爬蟲。在必要時才採用本文所說的方式來抓取由Javascript產生的網頁資料。

2019年12月7日 星期六

尋找重複圖片檔

摘要

前一篇談過〈尋找重複音樂檔〉,本文則談尋找重複的圖片、照片檔案這類的點陣圖檔[1],其格式有多種,像BMP, TIFF, GIF, JPEG, PNG[2]。這些並不同於向量圖[3],後者並不在本文的討論範圍。這類工具同樣也不算少,在本文也會簡單介紹筆者慣用的工具。