前言
今天講述很多大廠都在用的feapder架構,前面更新了十四個從零開始學python的系列文章,分别是:
1.程式設計文法必修篇
2.網絡程式設計篇
3.多線程/多程序/協程篇
4.MySQL資料庫篇
5.Redis資料庫篇
6.MongoDB資料庫篇
7.機器學習篇
8.全棧開發篇
9.Numpy/pandas/matplotlib篇
10.Hadoop篇
11.Spark篇
12.爬蟲工程師篇
13.爬蟲工程師自動化和抓包篇
14.scrapy架構篇
本系列文根據以下學習路線展開講述:
從零開始學python到進階進階路線圖首頁
一丶feapder任務排程機制
Feapder是一個基于Python的開源網絡爬蟲架構,具有任務排程、請求管理、資料解析等功能。其中,任務排程機制是Feapder架構的核心組成部分之一,用于管理和排程爬蟲任務的執行。
任務排程機制的核心概念是任務隊列(Task Queue),它用于存儲待執行的任務,并按照指定的優先級和排程政策來決定任務的執行順序。Feapder架構使用Redis作為任務隊列的存儲後端,并通過排程器(Scheduler)來管理任務隊列的操作。
下面是Feapder架構任務排程機制的詳細解釋:
1.任務隊列(Task Queue):
Feapder使用Redis作為任務隊列的存儲後端。任務隊列中存儲了待執行的任務,每個任務包含了要爬取的網址、爬蟲名稱、優先級等資訊。當爬蟲啟動時,它會從任務隊列中擷取待執行的任務,并開始執行。
2.排程器(Scheduler):
排程器是任務排程機制的核心元件,用于管理任務隊列。它負責從任務隊列中擷取待執行的任務,并根據任務的優先級和排程政策來确定任務的執行順序。排程器還負責将已執行的任務傳回給任務隊列,以便可以對其進行後續處理。
Feapder架構中的排程器實作了多個排程政策,包括先進先出(FIFO)、優先級(Priority)和随機(Random)等。開發者可以根據實際需求選擇适合的排程政策。
3.爬蟲任務(Spider Task):
爬蟲任務是任務排程機制的核心對象,表示待執行的爬蟲任務。每個爬蟲任務包含了要爬取的網址、待執行的爬蟲名稱、任務優先級等資訊。爬蟲任務由排程器從任務隊列中擷取,并通過排程器分發給相應的爬蟲執行。當爬蟲完成任務後,會将任務傳回給排程器,進而完成任務的生命周期。
4.爬蟲執行過程:
當Feapder架構啟動時,排程器會從任務隊列中擷取待執行的任務。然後,根據排程政策和任務優先級,将任務分發給相應的爬蟲進行執行。爬蟲執行任務後,會傳回任務的執行結果給排程器。排程器根據任務的狀态進行下一步的排程決策,繼續擷取下一個待執行的任務,并分發給爬蟲繼續執行。這樣,任務的執行和排程就形成了一個循環,直到任務隊列中沒有待執行的任務為止。
通過任務排程機制,Feapder架構可以高效地管理和排程大量的爬蟲任務,并實作靈活的任務優先級和排程政策。
二丶Feapder中間件實作異常處理
在Feapder架構中,中間件(Middleware)是一種攔截和處理請求以及響應的機制,用于在請求發送和響應解析過程中進行額外的處理。中間件可以用于實作異常處理、請求過濾、請求修改、日志記錄等功能。
下面是Feapder架構中間件實作異常處理的詳細解釋:
1.異常進行中間件(Exception Middleware): 異常進行中間件是一種特殊類型的中間件,用于捕獲和處理爬蟲請求過程中可能出現的異常情況。當請求過程中發生異常時,異常進行中間件會捕獲異常并進行相應的處理,如記錄日志、重試請求等。
2.異常進行中間件的實作:
在Feapder架構中,可以自定義異常進行中間件,實作自己的異常處理邏輯。可以通過繼承BaseMiddleware并重寫相應的方法來實作異常進行中間件。
- process_request(request, spider) 方法用于處理請求發送之前的邏輯。在該方法中,可以對請求進行一些預處理,或者進行異常處理的初始化操作。
- process_response(request, response, spider) 方法用于處理請求響應的邏輯。在該方法中,可以對響應進行一些處理,或者捕獲和處理請求過程中可能出現的異常情況。
- process_exception(request, exception, spider) 方法用于處理請求過程中發生的異常情況。在該方法中,可以針對特定的異常類型進行相應的處理,如記錄日志、重試請求等。
3.配置異常進行中間件:
在Feapder架構的配置檔案中,可以指定使用哪些中間件以及它們的順序。對于異常進行中間件,可以将其添加到中間件清單中,并指定其順序。Feapder架構在執行請求過程時,會按照中間件清單的順序依次調用相應的中間件方法。
通過中間件機制,Feapder架構提供了靈活的異常處理能力。開發者可以自定義異常進行中間件,并根據自己的需求進行定制化的異常處理邏輯。
三丶架構對接selenium實作自動化
feapder是一個基于Python的爬蟲架構,它提供了一些友善的工具和接口,可以幫助開發者快速建構爬蟲。其中,feapder架構對接selenium實作自動化是其重要的功能之一。
Selenium是一個自動化測試工具,可以模拟使用者在浏覽器中的操作,比如點選、輸入、滾動等。在爬蟲中,我們可以利用Selenium來模拟使用者的操作,進而實作一些需要登入或者需要執行JavaScript代碼的爬蟲任務。
下面是feapder架構對接selenium實作自動化的詳細步驟:
1.安裝Selenium和ChromeDriver
在使用Selenium之前,需要先安裝Selenium和ChromeDriver。Selenium可以通過pip安裝,ChromeDriver需要根據自己的Chrome浏覽器版本下載下傳對應的驅動程式。
2.建立SeleniumDownloader
在feapder中,我們可以通過建立SeleniumDownloader來實作對接Selenium。SeleniumDownloader是一個下載下傳器,它可以在下載下傳網頁時使用Selenium來模拟使用者的操作。
from feapder.downloader import SeleniumDownloader
downloader = SeleniumDownloader(
chrome_executable_path="path/to/chromedriver",
headless=False, # 是否使用無頭浏覽器
load_images=False, # 是否加載圖檔
window_size=(1920, 1080), # 浏覽器視窗大小
timeout=30, # 逾時時間
)
3.建立Spider
在feapder中,我們可以通過建立Spider來實作爬蟲任務。在Spider中,我們可以使用SeleniumDownloader來下載下傳網頁,并且可以在下載下傳前或下載下傳後執行一些自定義的操作。
from feapder import Spider
class MySpider(Spider):
def start_requests(self):
yield self.request(url="https://www.baidu.com", callback=self.parse)
def parse(self, request, response):
# 使用SeleniumDownloader下載下傳網頁
response = self.download(request, downloader_cls=SeleniumDownloader)
# 在下載下傳前或下載下傳後執行一些自定義的操作
driver = response.meta["driver"]
driver.execute_script("alert('Hello, world!')")
# 解析網頁
...
if __name__ == "__main__":
MySpider.start()
在上面的代碼中,我們使用SeleniumDownloader下載下傳了百度首頁,并在下載下傳後執行了一個JavaScript腳本,彈出了一個提示框。
4.配置Selenium
在使用Selenium時,我們需要配置一些選項,比如浏覽器視窗大小、逾時時間等。在feapder中,我們可以通過在Spider中定義selenium_options屬性來配置Selenium。
from selenium.webdriver.chrome.options import Options
class MySpider(Spider):
selenium_options = Options()
selenium_options.add_argument("--disable-gpu")
selenium_options.add_argument("--disable-dev-shm-usage")
selenium_options.add_argument("--disable-extensions")
selenium_options.add_argument("--disable-infobars")
selenium_options.add_argument("--disable-notifications")
selenium_options.add_argument("--disable-popup-blocking")
selenium_options.add_argument("--disable-setuid-sandbox")
selenium_options.add_argument("--disable-web-security")
selenium_options.add_argument("--ignore-certificate-errors")
selenium_options.add_argument("--no-sandbox")
selenium_options.add_argument("--start-maximized")
selenium_options.add_argument("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36")
def start_requests(self):
...
在上面的代碼中,我們定義了一些常用的Selenium選項,比如禁用GPU加速、禁用擴充、禁用通知等。
5.使用代理
在爬蟲中,我們經常需要使用代理來隐藏自己的IP位址。在feapder中,我們可以通過在Spider中定義proxy_pool屬性來使用代理。
class MySpider(Spider):
proxy_pool = ["http://127.0.0.1:8888", "http://127.0.0.1:8889"]
def start_requests(self):
...
在上面的代碼中,我們定義了兩個代理位址,feapder會自動從中選擇一個代理來通路網頁。
6.使用Cookie
在爬蟲中,我們經常需要使用Cookie來模拟登入狀态。在feapder中,我們可以通過在Spider中定義cookie_pool屬性來使用Cookie。
class MySpider(Spider):
cookie_pool = [
{"name": "name1", "value": "value1", "domain": "domain1.com"},
{"name": "name2", "value": "value2", "domain": "domain2.com"},
]
def start_requests(self):
...
在上面的代碼中,我們定義了兩個Cookie,feapder會自動将它們添加到請求頭中。
7.使用自定義的SeleniumDownloader
在feapder中,我們可以通過繼承SeleniumDownloader來實作自定義的下載下傳器。在自定義的下載下傳器中,我們可以重寫一些方法,比如before_download、after_download等,來實作一些自定義的操作。
from feapder.downloader import SeleniumDownloader
class MyDownloader(SeleniumDownloader):
def before_download(self, request):
# 在下載下傳前執行一些自定義的操作
...
def after_download(self, request, response):
# 在下載下傳後執行一些自定義的操作
...
class MySpider(Spider):
downloader_cls = MyDownloader
def start_requests(self):
...
在上面的代碼中,我們定義了一個自定義的下載下傳器MyDownloader,并在Spider中使用它來下載下傳網頁。
8.總結
通過以上步驟,我們可以在feapder架構中對接Selenium,實作自動化爬蟲任務。在使用Selenium時,我們需要注意一些問題,比如浏覽器視窗大小、逾時時間、代理、Cookie等。同時,我們也可以通過自定義的SeleniumDownloader來實作一些自定義的操作。
四丶feapder分布式采集
Feapder是一個基于Python的分布式爬蟲架構,它支援多種資料存儲方式,包括MySQL、MongoDB、Redis等。Feapder架構的分布式采集功能可以讓多個爬蟲節點同時工作,提高爬取效率。
下面是Feapder架構分布式采集的詳細介紹:
1.安裝Feapder架構
首先需要安裝Feapder架構,可以使用pip指令進行安裝:
pip install feapder
2.建立爬蟲項目
使用Feapder架構建立一個爬蟲項目非常簡單,隻需要繼承Feapder類并實作相應的方法即可。下面是一個簡單的爬蟲示例:
from feapder import Spider
class MySpider(Spider):
def start_requests(self):
yield self.request("http://www.example.com")
def parse(self, request, response):
print(response.text)
在這個示例中,我們建立了一個名為MySpider的爬蟲類,它繼承自Feapder類。在start_requests方法中,我們發送了一個請求并将其傳回。在parse方法中,我們列印了響應的文本内容。
3.配置分布式采集
要啟用分布式采集功能,需要在配置檔案中設定相應的參數。下面是一個示例配置檔案:
# 配置檔案
name: my_spider
log_level: INFO
redis:
host: 127.0.0.1
port: 6379
db: 0
password: ""
queue_name: my_spider
max_tasks: 100
concurrency: 10
在這個配置檔案中,我們設定了Redis作為任務隊列的存儲方式,并指定了隊列名稱、最大任務數和并發數等參數。
4.啟動爬蟲節點
要啟動爬蟲節點,需要使用Feapder指令行工具。首先需要安裝Feapder指令行工具:
pip install feapder-cli
然後使用feapder指令啟動爬蟲節點:
feapder run my_spider
在這個指令中,我們指定了要運作的爬蟲名稱為my_spider。
5.送出任務
要送出任務,可以使用Feapder架構提供的TaskQueue類。下面是一個示例:
from feapder import TaskQueue
queue = TaskQueue()
queue.put("http://www.example.com")
在這個示例中,我們建立了一個TaskQueue對象,并向其中送出了一個任務。
6.運作爬蟲
當任務送出完成後,可以使用Feapder架構提供的run方法來運作爬蟲:
from feapder import run_spider
run_spider(MySpider)
在這個示例中,我們使用run_spider方法來運作MySpider爬蟲。
7.檢視結果
當爬蟲運作完成後,可以檢視爬取的結果。Feapder架構支援多種資料存儲方式,包括MySQL、MongoDB、Redis等。可以根據需要選擇相應的存儲方式。
以上就是Feapder架構分布式采集的詳細介紹。使用Feapder架構可以輕松實作分布式爬蟲,提高爬取效率。
适用于零基礎學習和進階人群的python資源:
① 騰訊認證python完整項目實戰教程筆記PDF
② 十幾個大廠python面試專題PDF
③ python全套視訊教程(零基礎-進階進階JS逆向)
④ 百個項目實戰+源碼+筆記
⑤ 程式設計文法-機器學習-全棧開發-資料分析-爬蟲-APP逆向等全套項目+文檔