跳到主要內容

文章

BeautifulSoup vs Selenium vs Scrapy三大Python網頁爬蟲實作工具的比較

Photo by Prince Abid on Unsplash 網路的普及,為了要自動化的搜集資料,提升工作效率,相信Python網頁爬蟲是最常使用的方法之一,而要實作Python網頁爬蟲,最受歡迎的三大工具莫過於BeautifulSoup、Selenium及Scrapy,其中各自的主要特色以及使用時機,本文就來為大家進行簡單的分享與比較。

解析Python網頁爬蟲如何有效整合Pandas套件提升資料處理效率

Photo by Austin Distel on Unsplash 為了能夠自動化蒐集網頁上的資料,通常都會利用Python網頁爬蟲來幫忙完成,而蒐集到的資料如果想要進行排序、群組或篩選的動作,就需要花費不少的功夫來達成。 這時候,就能夠整合Pandas資料分析套件,將爬取的資料存入DataFrame資料結構,使用它所提供的方法,即可輕鬆操作其中的資料,除了提升處理資料的效率,也能夠讓程式碼更加簡潔。

[Pandas教學]掌握Pandas DataFrame讀取網頁表格的實作技巧

Photo by Windows on Unsplash 在 [Pandas教學]資料分析必懂的Pandas DataFrame處理雙維度資料方法 文章的分享中,可以得知Pandas DataFrame資料結構非常適合用於表格式 資料的儲存及處理,也因此被應用於許多的情境,而讀取網頁上的表格 (Table) 資料則是最常見的應用之一。

[Pandas教學]資料分析必懂的Pandas DataFrame處理雙維度資料方法

Photo by Slidebean on Unsplash 現在有許多的企業或商家,都會利用取得的使用者資料來進行分析,瞭解其中的趨勢或商機,由此可見,資料分析越來越受到重視,而這時候,能夠懂得使用資料分析工具就非常的重要。 在上一篇 [Pandas教學]資料分析必懂的Pandas Series處理單維度資料方法 文章中,分享了Pandas Series資料結構用於處理單維度資料集的實用方法,而本文則要來介紹Pandas套件的另一個非常重要的資料結構,也就是 DataFrame。

[Pandas教學]資料分析必懂的Pandas Series處理單維度資料方法

Photo by Myriam Jessier on Unsplash 在隨手可得的數據時代,資料分析逐漸成為顯學,利用視覺化軟體或是分析處理工具,將蒐集的資料轉變為有用的資訊,來協助使用者進行決策。 Pandas套件則是其中一種常用的資料分析處理工具,它是基於Python程式語言來建立的,非常容易使用且強大,主要應用於單維度(Series)與二維度(DataFrame)的資料處理。

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

Photo by UX Indonesia on Unsplas h 網際網路的盛行,日常生活中充滿了大量的資訊,也因此越來越多的使用者會利用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)的回應(Respons

[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.k

[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()方法(Met

[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)