跳到主要內容

文章

目前顯示的是 2020的文章

[Python爬蟲教學]開發Python網頁爬蟲前需要知道的五個基本觀念

Photo by UX Indonesia on Unsplash 網際網路的盛行,日常生活中充滿了大量的資訊,也因此越來越多的使用者會利用Python網頁爬蟲技術,來蒐集想要的資料,藉此來進行分析及應用,為了讓讀者能夠快速入門Python網頁爬蟲,本文想來和大家分享在開發前,需要知道的五個基本觀念,包含: 什麼是網頁爬蟲 網路的運作方式 網頁的基本結構 常見的套件及框架 網頁爬蟲開發流程 一、什麼是網頁爬蟲網頁爬蟲可以把它想像成是一種網頁機器人,能夠依照特定的模式或規則,自動化擷取網頁原始碼,來進行解析取得資料,所以被大量的應用在網頁資料蒐集。
當然網頁爬蟲部一定只能使用Python來進行實作,其它像Java、C#及JavaScript等程式語言也可以,而因為Python語法簡潔及擁有許多成熟的套件與框架,所以筆者選擇Python來開發網頁爬蟲。 二、網路的運作方式Python網頁爬蟲事實上就是模擬使用者來瀏覽網頁,這時候就需要瞭解網路的基本架構,分為用戶端(Client)及伺服端(Server)。
其中,用戶端(Client)就是使用者瀏覽網頁的裝置(例:本機電腦),當使用者點擊網頁時,也就代表請求(Request)的動作,存取該網頁連結的伺服端(Server),而伺服端(Server)接收連結得知使用者所要看的網頁後,將內容回應(Response)給用戶端(Client),如下圖: 這樣的網路運作方式就跟點餐的流程非常相似,當我們進到一間餐廳看著菜單,就像到一個網站瀏覽其中的網頁,接著,到櫃檯向老闆點餐的動作就像是看到喜歡的網頁,請求(Request)伺服端(Server)想看的網頁,最後,等待老闆烹飪完成送到餐桌上,像是伺服端(Server)端處理完成回應(Response)給使用者。
而在開發Python網頁爬蟲時,這邊有兩個重要的觀念,分別是: 請求方法(Request Method) 等待回應(Waits) 請求方法(Request Method)基本上分為四種,包含GET(查詢)、POST(新增)、PUT(修改)及DELETE(刪除),由於Python網頁爬蟲大部分皆是查詢伺服端(Server)想要存取的網頁,所以請求方法(Request Method)都是使用GET(查詢)。
另外,等待(Wait)伺服端(Server)的回應(Response)也非常重要,由於Python網頁…

[Django+Python網頁爬蟲教學]打造具有網頁爬蟲功能的關鍵字查詢網頁

Photo by Burst on Unsplash Python網頁爬蟲在日常生活中的應用非常普遍,用來自動化蒐集所需的資料,這時候如果能夠提供使用者一個介面,即可以依據不同的需求來爬取相應的資料,提升服務的體驗及彈性。

[Python爬蟲教學]快速搞懂AJAX動態載入網頁的爬取秘訣

Photo by LinkedIn Sales Navigator on Unsplash 在使用Python網頁爬蟲爬取網頁時,有些網頁為了提升使用體驗及維持執行效能,會使用AJAX的技術,非同步向伺服器傳送參數,取得資料來進行顯示,使用者不會感受到畫面有任何的閃爍或停頓,依然能夠正常的使用網頁。不過想要爬取這種類型的網頁,點擊滑鼠右鍵檢視原始碼時,會看到滿滿的Unicode編碼資料,沒有HTML標籤,這時候要來爬取網頁時,會完全抓不到資料。由於筆者在爬取KKday網站的一日遊票券時,就是遇到這樣的情況,所以想藉此來和大家分享Python網頁爬蟲該如何爬取AJAX類型的網頁,其中的開發流程如下:分析網頁分析AJAX回傳結果開發Python網頁爬蟲一、分析網頁首先,前往KKday網站,假設在搜尋的地方輸入「新竹市」進行搜尋後,在網頁左側的「所有商品類別」中,選擇「觀光旅行」下的「一日遊」,就可以查到新竹市一日遊的相關票券,如下圖: 這時候,點擊滑鼠右鍵檢視網頁原始碼時,會完全找不到網頁上所顯示的票券名稱,都是Unicode編碼,這就是典型的AJAX類型網頁,也因為瀏覽器有辦法解析,所以網頁能夠正常的顯示中文字。為了觀察網頁載入時,網頁向伺服器發送的請求(Request),點擊F12鍵開啟開發者模式,並且在原網頁點擊F5鍵重新整理,就可以在開發者模式的Network頁籤下,看到每一個請求(Request),如下圖: 接著,就要來找哪一個請求(Request)的回應(Response)是網頁上的資料,以上圖第6個請求(Request)為例,點擊後,可以在「Headers」看到它的請求(Request)內容,如下圖: 而要看這個請求(Request)的回應內容,可以切換到「Preview」頁籤來檢視,如下圖: 從上圖即可看到網頁上所顯示的票券資料,也就代表如果要使用Python網頁爬蟲來發送請求(Request)時,就是要使用「Headers」頁籤下的「Request URL」網址,如下圖: 從請求網址(Request URL)可以看到其中包含了幾個查詢的條件,目前只有輸入關鍵字(keyword)及選擇商品類別(cat),其它查詢條件都沒有輸入或保留預設值,所以,可以將請求網址(Request URL)簡化為: 「https://www.kkday.com/zh-tw/product…

[Python爬蟲教學]有效利用Python網頁爬蟲幫你自動化下載圖片

Photo by Soragrit Wongsa on Unsplash 圖像辨識的技術,現在已經廣泛的應用在日常生活中,舉例來說,Google相簿就有使用圖像辨識的技術,來協助使用者標記景點或人物,或是Facebook使用圖片辨識來取出圖片中的文字,來找出違反政策的貼文,改善動態消息的內容等。而要讓機器能夠辨識出圖片中的內容,就需要有大量的圖片進行機器學習,這時候就可以利用Python網頁爬蟲的技術,蒐集網路上所需的圖片,進而輸入機器中學習。所以本文想來和讀者分享,如何利用Python網頁爬蟲來自動化下載圖片,其中的開發流程為:分析圖片來源網站爬取圖片來源網址下載圖片至資料夾中一、分析圖片來源網站本文以Unsplash圖片網站為例,其中包含許多種類的高解析度圖片,如下: 假設在搜尋的地方輸入car,就可以找到汽車相關的圖片,如下: 這時候可以觀察網址的地方,最後會加上使用者所輸入的查詢關鍵字,如下圖: 接著,來看一下每張圖片的HTML原始碼結構,如下圖: 可以看到,圖片標籤(img)的樣式類別(class)為「_2VWD4 _2zEKz」,Python網頁爬蟲就能夠依據這個樣式類別(class)來進行定位,取得圖片。二、爬取圖片來源網址瞭解所要爬取的Unsplash圖片網站結構後,本文以Visual Studio Code,開啟Python網頁爬蟲專案資料夾,在Terminal的視窗中,利用以下的指令安裝所需的套件:$ pip install requests $ pip install beautifulsoup4 $ pip install lxml其中Requests套件用來發送請求給網頁,回應的結果就是使用BeautifulSoup套件爬取內容,而lxml則是支援BeautifulSoup套件的HTML/XML解析器。安裝完成後,建立app.py檔案,並且引用以下的模組(Module):from bs4 import BeautifulSoup import requests import os範例中引用的os模組(Module),提供操作檔案及目錄的方法,可以協助建立資料夾及存放下載的圖片。為了提供一個互動的介面,讓使用者能夠輸入想要下載的圖片,可以利用Python內建的input()方法(Method),取得所輸入的文字,如下範例:from bs4 imp…

[Python爬蟲教學]7個降低Python網頁爬蟲被偵測封鎖的實用方法

Photo by Denise Jans on Unsplash 現在的網頁五花八門,其中充滿了許多有價值的資料,因此有許多的使用者都會使用Python網頁爬蟲的技術來進行取得,而這也衍生了可能因為過量的請求(Request),導致網站的伺服器過載,而產生問題。 所以,越來越多的網站開始偵測網頁爬蟲,將其封鎖,這時候,在開發Python網頁爬蟲時,該如何降低被偵測到的風險呢?

[Python爬蟲教學]整合asyncio與aiohttp打造Python非同步網頁爬蟲

Photo by Campaign Creators on Unsplash 實務上開發Python網頁爬蟲,使用一般的同步處理(Synchronous)方式爬取大量的資料時,會發現需花費蠻久的時間,這是因為同步處理(Synchronous)需等待網頁回應後,才能繼續執行下一個任務,而在等待的過程中,執行緒是完全停滯的,不會去做其它的任務,所以,為了提升執行的速度,就會使用非同步處理(Asynchronous)來進行開發。

[Python爬蟲教學]非同步網頁爬蟲使用GRequests套件提升爬取效率的實作技巧

Photo by Zan on Unsplash 網頁相信是許多人取得訊息的主要來源,為了追蹤、分析或取得想要的資訊,Python網頁爬蟲技術被廣泛的使用,而如果所要爬取的資料量非常大時,效能就會變得非常的重要,而非同步(Asynchronous)處理則是用來提升效率的常用方法。

[Python爬蟲教學]學會使用Selenium及BeautifulSoup套件爬取查詢式網頁

Photo by Austin Distel on Unsplash 在多樣化的網頁中,為了避免一次載入大量的資料影響執行效能,除了可以使用分頁,或像電子商務及社群平台,透過滾動捲軸的方式動態載入資料外,另一種常見的做法,就是增加查詢的功能。

[Python爬蟲教學]解析如何串接Google Sheet試算表寫入爬取的資料

Photo by William Iven on Unsplash 雲端相信大家都不陌生,日常生活中有許多的應用程式,都是運行在雲端平台上,讓使用者可以不受地點的限制,只要能夠連上網路,就可以使用雲端上的服務。

[Python爬蟲教學]活用openpyxl套件將爬取的資料寫入Excel檔案

Photo by UX Indonesia on Unsplash 在開發Python網頁爬蟲時,除了可以將取得的資料儲存在資料庫外,有時候,也會想要匯出成Excel檔案,進而使用其中的圖形化功能,來製作統計圖表,有效率的進行資料分析。

[Python爬蟲教學]教你如何部署Python網頁爬蟲至Heroku雲端平台

Photo by Lara Far on Unsplash 想要從事網頁資料分析的人,相信對於使用Python來開發網頁爬蟲取得所需的資料並不陌生,但是有沒有辦法能夠每天持續的自動化蒐集資料,並且儲存在資料庫中,使得有足夠的資料量可以進行分析?

[Python爬蟲教學]輕鬆學會Python網頁爬蟲與MySQL資料庫的整合方式

Photo by Markus Spiske on Unsplash 在數據爆炸的時代,想要透過資料分析來取得其中有價值的資訊,就需要先獲取大量的資料,並且有效的儲存起來,如此才能夠進行多樣化的應用。而網頁則是最常見的資料蒐集管道,通常會利用API、Open Data(開放資料)或Python網頁爬蟲等技術來進行取得,那又該如何把這些資料儲存起來呢?

[Python+LINE Bot教學]快速掌握LINE Bot部署至Heroku雲端平台的重點

Photo by Štefan Štefančík on Unsplash 身為LINE Bot的服務提供者,為了每天能持續的提供使用者有價值的資訊,想必會想尋找一個24小時不間斷的環境來運行LINE Bot,而雲端平台就會是最佳的解決方案,不但擁有多樣的資源,也能夠依據使用量彈性擴充。

[Python+LINE Bot+PostgreSQL教學]一篇搞懂LINE Bot讀取資料庫的方法

Photo by Alvaro Reyes on Unsplash LINE Bot的自動化回覆訊息特性,使得被廣泛的應用在許多的場景,其中又以推播有價值的資訊為大宗,而這些資料除了可以像[Python+LINE Bot教學]建構具網頁爬蟲功能的LINE Bot機器人文章一樣,利用網路爬蟲即時蒐集外,當資料量非常大或有歷史資料的查詢需求時,也可以將資料儲存至資料庫中,使用者需要時,LINE Bot直接從資料庫中取得即可,提升執行效能。

[Python+LINE Bot教學]提升使用者體驗的按鈕樣板訊息(Buttons template message)實用技巧

Photo by Alexandru Acea on Unsplash 在LINE通訊軟體普遍的使用下,許多店家紛紛透過建立LINE Bot,來自動和使用者互動,瞭解消費的需求,進而推播相關的優惠訊息。
大家如果有仔細觀察,可以發現當使用者對店家的LINE Bot發出訊息時,有些除了回應文字訊息外,還會回應貼圖、影片或樣板訊息等,來提高使用者體驗,這些就是LINE Messaging API所提供的訊息型態(Message types),讓開發人員可以依據需求,來客製化回應的訊息。

[Python+LINE Bot教學]建構具網頁爬蟲功能的LINE Bot機器人

Photo by Tim Bennett on Unsplash LINE Bot機器人在日常生活中,相信都可以看到它的身影,像是線上購物平台的優惠活動或最新消息推播等,藉此來和使用者進行互動。所以筆者也開發了一個美食餐廳機器人(FoodLineBot),來幫助使用者找到理想的餐廳。
本文延續[Python+LINE Bot教學]6步驟快速上手LINE Bot機器人文章,在瞭解LINE Bot的執行架構,建置了一個基本的答話功能後,接下來就要來教各位如何整合Python網頁爬蟲,將取得的訊息,透過LINE Bot自動回覆給使用者。
本文的重點包含: LINE Bot專案架構Python網頁爬蟲LINE Bot整合Python網頁爬蟲 一、LINE Bot專案架構首先,來複習一下[Python+LINE Bot教學]6步驟快速上手LINE Bot機器人文章中的專案架構,如下圖: 而加入Python網頁爬蟲後,它的架構就會是如下圖: 也就是在Django專案中,新增一個Python檔案,在其中撰寫網頁爬蟲的程式碼,最後將取得的資料透過文字訊息回應給使用者。
為了簡化教學內容,讓讀者易於學習,所以本文只會爬取一個美食網站的資訊作為範例,當讀者熟悉後,即可依照需求爬取更多的網站。 二、Python網頁爬蟲本文將以知名美食網站愛食記為例,爬取其中的餐廳資訊,首頁如下圖: 在網站中,包含許多非常棒的美食專欄文章及評價,並且提供了餐廳篩選的條件,如下圖: 本文就先來示範爬取某地區前五名最高人氣且營業中的餐廳資訊,而在下一篇文章中,則會增加讓使用者選擇美食分類及平均消費價格的需求,也就是上圖的美食分類及平均消費的篩選條件,將符合的餐廳資訊回覆給使用者。
接下來,利用以下的指令安裝Requests及BeautifulSoup套件,分別用來請求存取與解析網頁的HTML原始碼: $ pip install requests $ pip install beautifulsoup4 開啟Django專案,在應用程式(foodlinebot)下,新增一個scraper.py檔案,如下圖: 在scraper.py檔案中,會使用Python物件導向的多型(Polymorphism)概念來進行設計,可以參考[Python物件導向]Python多型(Polymorphism)實用教學文章,目的是除了保有每一個美食網頁爬蟲都擁…