跳到主要內容

文章

目前顯示的是 五月, 2020的文章

[Python爬蟲教學]整合Python Selenium及BeautifulSoup實現動態網頁爬蟲

Photo by LAUREN GRAY on Unsplash 相信大家都知道,取得資料後能夠進行許多的應用,像是未來的趨勢預測、機器學習或資料分析等,而有效率的取得資料則是這些應用的首要議題,網頁爬蟲則是其中的一個方法。
網頁爬蟲就是能夠取得網頁原始碼中的元素資料技術,但是,有一些網頁較為特別,像是社群平台,需先登入後才能進行資料的爬取,或是電商網站,無需登入,但是要透過滾動捲軸,才會動態載入更多的資料,而要爬取這樣類型的網頁爬蟲,就稱為動態網頁爬蟲。
該如何實作呢?本文將使用Python Selenium及BeautifulSoup套件來示範動態網頁爬蟲的開發過程,重點包含: BeautifualSoup vs Selenium安裝Selenium及Webdriver安裝BeautifulSoupSelenium get()方法Selenium元素定位Selenium send_keys()方法Selenium execute_script方法BeautifulSoup find_all()方法BeautifulSoup getText()方法 一、BeautifualSoup vs SeleniumBeautifulSoup套件相信對於開發網頁爬蟲的人員來說,應該都有聽過,能夠解析及取得HTML原始碼各個標籤的元素資料,擁有非常容易上手的方法(Method),但是,對於想要爬取動態網頁資料來說,則無法達成,因為BeautifulSoup套件並沒有模擬使用者操作網頁的方法(Method),像是輸入帳號密碼進行登入或滾動捲軸等,來讓網頁動態載入資料,進行爬取的動作。
所以,這時候,就可以使用被設計於自動化測試的Selenium套件,來模擬使用者的動作,進行登入後爬取資料或滾動卷軸,並且能夠執行JavaScript程式碼,這些就是Selenium與BeautifulSoup套件最大不同的地方。對於開發Python動態爬蟲來說,就可以結合Selenium套件以上的特點,讓網頁動態載入資料後,再利用BeautifulSoup套件簡潔的方法(Method),將所需的資料爬取下來。
本文就是利用這樣的概念,利用Selenium套件登入Facebook後,前往粉絲專頁,執行滾動卷軸的JavaScript程式碼,讓網頁動態載入資料後,再使用BeautifulSoup套件爬取貼文標題。 二、…

[Django教學18]善用Django Filter來快速建構多條件的查詢功能

Photo by Nathana Rebouças on Unsplash 在數據爆炸的時代裡,許多的網站、社群平台及資訊系統等,擁有了大量的資料,為了要精準的找到符合所需的資料來進行分析、處理或存檔,這時候就非常需要仰賴查詢的功能,提供適當的條件來讓使用者進行資料篩選。
使用Python的Django框架來進行網站開發,想要提供這種多條件的查詢功能,則可以使用django-filter套件,它是一個能夠基於資料模型的欄位,動態依照條件來進行資料集的篩選,除了能夠簡化在檢視函式(View Function)中撰寫大量的查詢語法,也提升了開發效率。
所以本文將利用django-filter套件,來建置多條件的電影查詢功能,來示範它的使用方式。其中的實作包含: 安裝django-filter建立資料模型(Models)建立過濾器(Filters)建立檢視函式(Views)建立樣板(Templates)客製化過濾器 一、安裝django-filter首先,利用以下的指令來安裝django-filter: $ pip install django-filter安裝成功後,開啟Django專案中的settings.py檔案,在INSTALL_APPS的地方,加入django-filters,如下範例: INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'movies.apps.MoviesConfig',
    'django_filters',
] 二、建立資料模型(Models)本文所使用的資料模型,如下範例: from django.db import models

class Movie(models.Model):
    GENRE_CHOICES = (
        ('action', &#…

[Django教學17]Django專案整合Amazon S3雲端服務5步驟就上手

Photo by Christian Wiediger on Unsplash Amazon相信大家都知道,是一個非常大的電商平台,同時,也提供了許多的雲端服務,常見的像儲存服務(S3)、虛擬伺服器(EC2)及運算服務(Lambda)等,讓全世界的開發人員,透過整合Amazon的雲端服務,來提升應用程式的彈性及效能。
所以本文以[Django教學9]6個步驟搞懂Django上傳圖片的功能部落格文章為基礎,分享如何將Django專案中的靜態檔案,如JavaScript、CSS及Image(圖片)檔等,儲存至Amazon S3服務,讓Django專案有較佳的儲存彈性,而不會隨著靜態檔案的增加,使得專案無限的擴張。其中的整合步驟包含: 建立Amazon S3 Bucket建立Amazon IAM安裝django-storages儲存Django的上傳檔案到Amazon S3儲存Django靜態檔案到Amazon S3 一、建立Amazon S3 Bucket在開始進行實作前,需事先到AWS 管理主控台註冊帳號,首頁如下圖: 點擊「建立新帳戶」,按照步驟填寫相關資料即可。建立成功且登入後,就可以看到如下圖的畫面: 接著在「尋找服務」的地方就可以查詢所需的Amazon服務,所以輸入S3就可以找到,如下圖: 點擊後,會看到Amazon S3服務的首頁,可以進行相關的設定及操作。首先,要建立一個儲存體,就像儲存資料一定要先建立一個資料庫一樣,選擇「建立儲存體」,如下圖: 輸入儲存體的名稱及選擇「us-west-2」區域,剩下的保留預設值,點擊右下角的「建立儲存體」按鈕即可,如下圖: 建立成功後,就可以在Amazon S3的首頁看到剛剛所建立的儲存體,如下圖: 接下來,就要設定這個Amazon S3儲存體的存取權限。點擊儲存體的名稱,並且切換到「許可」頁籤下的「CORS組態」,如下圖: 貼上範例中的以下CORS組態: <?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration>
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>GET</AllowedMet…

[Django教學16]建構Django網站該知道的Email寄送方式

Photo by Austin Distel on Unsplash 相信大家在使用各大網站時,都會收到各式各樣的電子郵件訊息,像是註冊成功、限時優惠活動、新產品推出或登入通知等,可見發送電子郵件功能在網站與使用者的溝通上扮演非常重要的角色。
使用Python開發網站時,想要在Django框架中加入電子郵件的服務,該如何實作呢?本文將以[Django教學8]Django UserCreationForm實作網站登入驗證及註冊功能分享文章為範例,在註冊成功時,傳送電子郵件通知使用者。其中的重點包含: Django Email SMTP設定Django Email寄送方式Django Email樣板客製化一、Django Email SMTP設定在進行實作前,需先利用寄件者的Gmail帳號取得應用程式的Gmail密碼,否則任何應用程式透過Gmail進行郵件傳送時,會被認為不安全而被Google封鎖,而取得的步驟可以參考[Python實戰應用]Python寄送Gmail電子郵件實作教學文章的第二節。
要讓Django所建置出來的網站擁有寄送電子郵件的服務,就需要設定SMTP傳輸協定,而本文將使用Gmail所提供的SMTP伺服器來進行傳送。開啟Django專案中的settings.py檔案,增加以下的SMTP設定: # SMTP Configuration EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'smtp.gmail.com' #SMTP伺服器 EMAIL_PORT = 587 #TLS通訊埠號 EMAIL_USE_TLS = True #開啟TLS(傳輸層安全性) EMAIL_HOST_USER = 'example@gmail.com' #寄件者電子郵件 EMAIL_HOST_PASSWORD = '****' #Gmail應用程式的密碼 設定完成後,當Django網站要寄送電子郵件時,Gmail的SMTP伺服器就會使用應用程式的密碼,登入寄件者的電子郵件,來進行傳送。 二、Django Email寄送方式接著,開啟Django的views.py檔案,在註冊成功的地方,加入寄送電子郵件的功能。這時候…

[Django教學15]Django連接PostgreSQL資料庫手把手教學

Photo by Matthew Guay on Unsplash 大家在使用Python的Django框架來建置網站時,預設會提供SQLite輕量資料庫來進行開發,通常適用在規模不大的小型應用程式上,但是,隨著網站功能的擴大或用戶數的增加,就會需要使用像PostgreSQL、MariaDB、MySQL及Oracle等企業級的資料庫,來提升資料的存取效能,好消息是,這四家資料庫Django官方皆有支援。
所以本文將以PostgreSQL資料庫,來示範如何在Django框架中,將預設連接的SQLite資料庫,改為PostgreSQL資料庫,讓Django所建置出來的網站,能有較佳的資料處理。其中主要的步驟包含: 安裝PostgreSQL建立PostgreSQL資料庫設定Django連接PostgreSQL一、安裝PostgreSQL首先,前往PostgreSQL官方下載網站,如下圖: 依照作業系統來下載安裝檔即可,本文將以Windows作業系統為例進行說明。開啟安裝檔後,可以看到如下圖的畫面: 安裝過程基本上都保留預設值,並且下一步就好。其中,有一個步驟會需要設定PostgreSQL的密碼,如下圖: 設定完成,點擊下一步來設定Port號,這邊同樣保留預設值,如下圖: 經過一段時間的安裝後,會看到設定完成的畫面,如下圖: 點擊Finish,接著在下拉選單中選擇PostgreSQL,如下圖: 點擊下一步,在Database Server的地方,選擇最新版的PostgreSQL資料庫伺服器,如下圖: 最後,勾選Skip Installation,如下圖: 接著,點擊Finish就完成PostgreSQL的安裝了。 二、建立PostgreSQL資料庫PostgreSQL安裝完成後,接下來就可以為Django專案建立資料庫,來儲存專案所需的資料。
在剛剛的PostgreSQL安裝過程中,有幫我們安裝了一個pgAdmin工具,讓開發人員能夠有效率的進行PostgreSQL資料庫操作。
開啟的方式除了在Windows開始的地方搜尋pgAdmin關鍵字外,也可以在安裝目錄下(C:\Program Files\PostgreSQL\12\pgAdmin 4\bin),找到pgAdmin4的執行檔。
開啟後,pgAdmin會要求輸入剛剛所設定的PostgreSQL密碼,登入成功就可以看到如下畫面: 在PostgreS…