跳到主要內容

文章

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

Photo by Denise Jans on Unsplash 現在的網頁五花八門,其中充滿了許多有價值的資料,因此有許多的使用者都會使用Python網頁爬蟲的技術來進行取得,而這也衍生了可能因為過量的請求(Request),導致網站的伺服器過載,而產生問題。 所以,越來越多的網站開始偵測網頁爬蟲,將其封鎖,這時候,在開發Python網頁爬蟲時,該如何降低被偵測到的風險呢?本文提供了以下7個方法給讀者進行參考:輪流切換IP位址設定請求表頭(Request Headers)設定使用者代理(User-Agent)設定參照位址(Referer)設定隨機的延遲時間使用無頭瀏覽器(Headless Browser)避免掉入網頁蜜罐陷阱(Honeypot Traps)PS.提醒大家,在爬取的過程中,要尊重對方的網站及其它的使用者,避免過量的請求(Request)而破壞網站的使用體驗。一、輪流切換IP位址如果固定的使用同一組IP位址,在固定的時間內大量的請求(Request)網站,毫無疑問有很大的機率會被認為是網頁爬蟲,進而被封鎖請求(Request)。因此,要利用Python網頁爬蟲爬取網站時,會建議需要擁有多組的IP位址,在每一次的請求(Request)時,輪流切換使用,來降低被偵測到的機會,可以參考使用Proxy切換服務,像是Scrapingdog等,或是IP切換服務,像是ScraperAPI等,讓Python網頁爬蟲進行請求(Request)時,能夠使用不同的IP位址。二、設定請求表頭(Request Headers)請求表頭(Request Headers)就是在瀏覽器發送任何一個請求(Request)時,告訴目標網頁相關的瀏覽器資訊,可以在Chrome瀏覽器開發者模式的Network頁籤下看到,如下圖: 為了讓Python網頁爬蟲在發送請求(Request)時,能夠像真實的瀏覽器一樣,最好要設定請求表頭(Request Headers)資訊,如果沒有設定,很明顯就會被認為是Python網頁爬蟲而被封鎖。除了能夠在Chrome瀏覽器開發者模式得知自己的請求表頭(Request Headers)外,也可以利用此網站來查看,在Python網頁爬蟲的專案中,只要複製其中的headers欄位來使用即可,如下範例:import requests headers = { …

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

Photo by Campaign Creators on Unsplash 實務上開發Python網頁爬蟲,使用一般的同步處理(Synchronous)方式爬取大量的資料時,會發現需花費蠻久的時間,這是因為同步處理(Synchronous)需等待網頁回應後,才能繼續執行下一個任務,而在等待的過程中,執行緒是完全停滯的,不會去做其它的任務,所以,為了提升執行的速度,就會使用非同步處理(Asynchronous)來進行開發。非同步處理(Asynchronous)就是能夠在等待網頁回應的同時,可以先去做其它的任務,不會因為等待而停擺。在[Python爬蟲教學]非同步網頁爬蟲使用GRequests套件提升爬取效率的實作技巧文章中,分享了利用GRequest套件來實作Python非同步網頁爬蟲,本文將延續分享另一個實作Python非同步網頁爬蟲的方法,就是利用asyncio模組(Module)及aiohttp套件,需搭配Python 3.5+,其中的實作重點包含:asyncio模組aiohttp套件安裝aiohttp套件定義協程(coroutine)定義協程任務(Task)執行協程(coroutine)一、asyncio模組asyncio是在Python 3.4時引入的非同步模組(Module),使用async及await語法來支援非同步的執行,也就是在Python的函式(Function)前加上async關鍵字,來定義協程(coroutine),在其中定義非同步的任務清單,接著,透過事件迴圈(Event Loop)來進行不同任務間的切換執行,達到非同步的執行效果。二、aiohttp套件aiohttp是基於asyncio的非同步HTTP用戶端/伺服端套件,能夠非同步的發送請求(request)及執行非同步的程式碼,所以非常適合用來開發Python非同步的網頁爬蟲,提升執行的效率。三、安裝aiohttp套件本文以Visual Studio Code為例,開啟[Python爬蟲教學]非同步網頁爬蟲使用GRequests套件提升爬取效率的實作技巧文章所建置的專案,利用以下的指令安裝aiohttp套件:$ pip install aiohttp四、定義協程(coroutine)協程(coroutine)簡單來說,就是所要執行的非同步內容,定義的方式就是在Python函式(Funct…

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

Photo by Zan on Unsplash 網頁相信是許多人取得訊息的主要來源,為了追蹤、分析或取得想要的資訊,Python網頁爬蟲技術被廣泛的使用,而如果所要爬取的資料量非常大時,效能就會變得非常的重要,而非同步(Asynchronous)處理則是用來提升效率的常用方法。因此,本文想要以104人力銀行網站,爬取Python職缺為例,來和讀者分享如何使用GRequests套件,來開發Python非同步網頁爬蟲,並且比較同步與非同步網頁爬蟲所花費的執行時間,其中的重點包含:同步vs非同步GRequests套件Python同步網頁爬蟲Python非同步網頁爬蟲一、同步vs非同步簡單來說,同步(Synchronous)就是接到一個任務後,需要等到它完成,才能繼續執行下一個任務。就像到了中午買午餐時,想要買一個炒飯和7-11的飲料,同步(Synchronous)處理就是需要等到炒飯做完了,才能去7-11買飲料,導致花費較多的執行時間。而非同步(Asynchronous)則是能夠平行處理,無需等待第一個任務完成,即可執行其它的任務,只要第一個任務完成了,再回來處理。以上面的例子來說,非同步(Asynchronous)處理就是在叫完炒飯的同時,就可以去7-11買飲料,達到同時處理多個任務,提升執行效率。二、GRequests套件一般的情況下,使用Python開發網頁爬蟲時,所使用的requests套件,就是同步(Synchronous)處理,在發送一個請求(request)後,在還沒有收到回應前,不會執行其它的任務。而grequests套件則是封裝了requests及gevent(協程)的套件,只要建置網址請求清單,就能夠平行發送多個請求(request),達到非同步(Asynchronous)處理,提升Python網頁爬蟲的執行效率。三、Python同步網頁爬蟲本文以Visual Studio Code為例,開啟Python網頁爬蟲專案,在Terminal視窗中,利用以下的指令來安裝所需的套件:$ pip install beautifulsoup4 $ pip install requests $ pip install lxml #HTML解析器接著,新增synch.py檔案,並且引用以下的模組(Module):from bs4 import Beautifu…

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

Photo by Austin Distel on Unsplash 在多樣化的網頁中,為了避免一次載入大量的資料影響執行效能,除了可以使用分頁,或像電子商務及社群平台,透過滾動捲軸的方式動態載入資料外,另一種常見的做法,就是增加查詢的功能。
常見的查詢式網頁,舉例來說,像是訂票系統,在網頁載入時,並不會把所有的時刻票劵資訊顯示出來,而是需要使用者指定想要購買的時刻,點擊查詢後,才會載入資料。如果想要利用Python網頁爬蟲爬取這種查詢類型的網頁,該如何實作呢?
本文以臺灣證券交易所的「個股日收盤價及月平均價」查詢式網頁為例,分享如何整合Python的selenium及beautifulsoup套件,自動化指定查詢條件,並且爬取查詢結果。其中的實作重點包含: 「個股日收盤價及月平均價」網頁分析安裝selenium及beautifulsoup套件selenium自動化指定查詢條件beautifulsoup爬取查詢結果 一、「個股日收盤價及月平均價」網頁分析臺灣證券交易所的「個股日收盤價及月平均價」,主要用來提供使用者查詢個股在指定的年月中,每日的收盤價及月平均價,如下圖: 如果有多檔股票需要分析,相信使用人工的方式來進行查詢及下載,會花費不少的時間,而透過Python網頁爬蟲,將會大幅提升取得資料的效率。
從上圖中可以看到,網頁分為查詢條件及結果,而指定查詢條件的部分,就需要使用Python的selenium自動化套件,來模仿使用者輸入年、月、股票代碼及點擊查詢按鈕,有了查詢結果後,即可利用Python的beautifulsoup套件,解析HTML原始碼,取得所需的資料。 二、安裝selenium及beautifulsoup套件本文以Visual Studio Code為例,在Terminal視窗中利用以下的指令來安裝Python的selenium、beautifulsoup及webdriver-manager套件: $ pip install selenium $ pip install beautifulsoup4 $ pip install webdriver-manager 其中,webdriver-manager套件是用來協助selenium套件,在執行Python網頁爬蟲時,自動下載瀏覽器的驅動程式(Webdriver)。 三、selenium自動化指定查詢條件新增scr…