本文以Accupass網站的精選活動為例,來分享Scrapy框架整合Selenium套件,開發Python網頁爬蟲的流程。 
 
Q: 如何建立Scrapy網頁爬蟲? 
首先,利用以下指令安裝Scrapy框架: 
$ pip install scrapy 
 
接著,新增一個資料夾,並且使用命令提示字元切換到該資料夾的目錄下,建立Scrapy專案,如下: 
$ scrapy startproject accupass_scraper . 
 
有了專案後,就能夠利用以下指令建立Scrapy網頁爬蟲: 
$ scrapy genspider accupass accupass.com 
 
Q:如何安裝scrapy-selenium套件? 
而Scrapy框架想要使用Selenium套件來發送請求與接收回應,就需要一個Middleware來使用Selenium套件。 
 
其中的Middleware,也就是在Scrapy發送請求前,以及將回應結果傳給Scrapy網頁爬蟲前,能夠在Middleware中來進行前處理。 
所以,Scrapy框架想要使用Selenium套件來發送請求與接收回應結果,就需要定義Middleware,當然,已經有大大寫好了scrapy-selenium Middleware可以使用,安裝方式如下指令: 
$ pip install scapy-selenium 
 
接下來,前往下載Selenium的瀏覽器驅動,並且放置於Scrapy專案資料夾中。開啟settings.py檔案,加入scrapy-selenium Middleware的相關設定,如下範例: 
DOWNLOADER_MIDDLEWARES = { 
    'scrapy_selenium.SeleniumMiddleware': 800 
} 
 
SELENIUM_DRIVER_NAME = 'chrome' 
SELENIUM_DRIVER_EXECUTABLE_PATH = 'chromedriver.exe' 
SELENIUM_DRIVER_ARGUMENTS = ['-headless'] 
 
Q:如何Scrapy整合Selenium爬取動態網頁? 
開啟Scrapy專案的accupass.py檔案,引用scrapy-selenium的SeleniumRequest模組,如下範例: 
import scrapy 
from scrapy_selenium import SeleniumRequest 
 
而想要讓Scrapy框架使用Selenium套件發送請求,就可以新增start_requests()方法,如下範例: 
class AccupassSpider(scrapy.Spider): 
    name = 'accupass' 
    allowed_domains = ['accupass.com'] 
  
    def start_requests(self): 
 
以上的callback參數就是收到網頁的回應結果之後,所要執行的方法,也就是爬取網頁上的資料,如下範例: 
class AccupassSpider(scrapy.Spider): 
    name = 'accupass' 
    allowed_domains = ['accupass.com'] 
  
    def start_requests(self): 
  
    def parse(self, response): 
        titles = response.css("p.style-f13be39c-event-name::text").getall() 
        for title in titles: 
            print(title)  
 
)網站觀看更多精彩內容。