A place for study and research

Python 100 Days SP Concurrent Programming in Python-1

|

author: jackfrued

Python中的並發編程-1

現如今,我們使用的計算機早已是多 CPU 或多核的計算機,而我們使用的操作系統基本都支持“多任務”,這使得我們可以同時運行多個程序,也可以將一個程序分解為若幹個相對獨立的子任務,讓多個子任務“並行”或“並發”的執行,從而縮短程序的執行時間,同時也讓用戶獲得更好的體驗。因此當下,不管用什麽編程語言進行開發,實現“並行”或“並發”編程已經成為了程序員的標配技能。為了講述如何在 Python 程序中實現“並行”或“並發”,我們需要先了解兩個重要的概念:進程和線程。

Python 100 Days Day64 Introduction to Selenium

|

author: jackfrued

使用Selenium抓取網頁動態內容

根據權威機構發布的全球互聯網可訪問性審計報告,全球約有四分之三的網站其內容或部分內容是通過JavaScript動態生成的,這就意味著在瀏覽器窗口中“查看網頁源代碼”時無法在HTML代碼中找到這些內容,也就是說我們之前用的抓取數據的方式無法正常運轉了。解決這樣的問題基本上有兩種方案,一是獲取提供動態內容的數據接口,這種方式也適用於抓取手機 App 的數據;另一種是通過自動化測試工具 Selenium 運行瀏覽器獲取渲染後的動態內容。對於第一種方案,我們可以使用瀏覽器的“開發者工具”或者更為專業的抓包工具(如:Charles、Fiddler、Wireshark等)來獲取到數據接口,後續的操作跟上一個章節中講解的獲取“360圖片”網站的數據是一樣的,這里我們不再進行贅述。這一章我們重點講解如何使用自動化測試工具 Selenium 來獲取網站的動態內容。

Python 100 Days Day63 Web Crawler With Concurrent Programming

|

author: jackfrued

並發編程在爬蟲中的應用

之前的課程,我們已經為大家介紹了 Python 中的多線程、多進程和異步編程,通過這三種手段,我們可以實現並發或並行編程,這一方面可以加速代碼的執行,另一方面也可以帶來更好的用戶體驗。爬蟲程序是典型的 I/O 密集型任務,對於 I/O 密集型任務來說,多線程和異步 I/O 都是很好的選擇,因為當程序的某個部分因 I/O 操作阻塞時,程序的其他部分仍然可以運轉,這樣我們不用在等待和阻塞中浪費大量的時間。下面我們以爬取“360圖片”網站的圖片並保存到本地為例,為大家分別展示使用單線程、多線程和異步 I/O 編程的爬蟲程序有什麽區別,同時也對它們的執行效率進行簡單的對比。

Python 100 Days Day62 Web Crawler Using Python-2

|

author: jackfrued

用Python解析HTML頁面

在前面的課程中,我們講到了使用request三方庫獲取網絡資源,還介紹了一些前端的基礎知識。接下來,我們繼續探索如何解析 HTML 代碼,從頁面中提取出有用的信息。之前,我們嘗試過用正則表達式的捕獲組操作提取頁面內容,但是寫出一個正確的正則表達式也是一件讓人頭疼的事情。為了解決這個問題,我們得先深入的了解一下 HTML 頁面的結構,並在此基礎上研究另外的解析頁面的方法。

Python 100 Days Day62 Web Crawler Using Python-1

|

author: jackfrued

用Python獲取網絡數據

網絡數據采集是 Python 語言非常擅長的領域,上節課我們講到,實現網絡數據采集的程序通常稱之為網絡爬蟲或蜘蛛程序。即便是在大數據時代,數據對於中小企業來說仍然是硬傷和短板,有些數據需要通過開放或付費的數據接口來獲得,其他的行業數據和競對數據則必須要通過網絡數據采集的方式來獲得。不管使用哪種方式獲取網絡數據資源,Python 語言都是非常好的選擇,因為 Python 的標準庫和三方庫都對網絡數據采集提供了良好的支持。