1、爬蟲文件
dispatcher.connect()信號分發器,第一個參數信號觸發函數,第二個參數是觸發信號,
signals.spider_closed是爬蟲結束信號
# -*- coding: utf-8 -*-
import scrapy
from scrapy.http import Request,FormRequest
from selenium import webdriver # 導入selenium模塊來操作瀏覽器軟件
from scrapy.xlib.pydispatch import dispatcher # 信號分發器
from scrapy import signals # 信號
class PachSpider(scrapy.Spider): #定義爬蟲類,必須繼承scrapy.Spider
name = 'pach' #設置爬蟲名稱
allowed_domains = ['www.taobao.com'] #爬取域名
def __init__(self): #初始化
self.browser = webdriver.Chrome(executable_path='H:/py/16/adc/adc/Firefox/chromedriver.exe') #創建谷歌瀏覽器對象
super(PachSpider, self).__init__() #設置可以獲取上一級父類基類的,__init__方法里的對象封裝值
dispatcher.connect(self.spider_closed, signals.spider_closed) #dispatcher.connect()信號分發器,第一個參數信號觸發函數,第二個參數是觸發信號,signals.spider_closed是爬蟲結束信號
#運行到此處時,就會去中間件執行,RequestsChrometmiddware中間件了
def spider_closed(self, spider): #信號觸發函數
print('爬蟲結束 停止爬蟲')
self.browser.quit() #關閉瀏覽器
def start_requests(self): #起始url函數,會替換start_urls
return [Request(
url='https://www.taobao.com/',
callback=self.parse
)]
def parse(self, response):
title = response.css('title::text').extract()
print(title)
2、middlewares.py中間件文件
from scrapy.http import HtmlResponse
class RequestsChrometmiddware(object): # 瀏覽器訪問中間件
def process_request(self, request, spider): # 重寫process_request請求方法
if spider.name == 'pach': # 判斷爬蟲名稱為pach時執行
spider.browser.get(request.url) #用谷歌瀏覽器訪問url
import time
time.sleep(3)
print('訪問:{0}'.format(request.url)) # 打印訪問網址
#設置響應信息,由瀏覽器響應信息返回
return HtmlResponse(url=spider.browser.current_url, body=spider.browser.page_source, encoding='utf-8', request=request)
3、settings.py配置文件注冊中間件
DOWNLOADER_MIDDLEWARES = { #開啟注冊中間件
'adc.middlewares.RequestsUserAgentmiddware': 543,
'adc.middlewares.RequestsChrometmiddware': 542,
'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None, #將默認的UserAgentMiddleware設置為None
}

