三十 Python分布式爬蟲打造搜索引擎Scrapy精講—將selenium操作谷歌瀏覽器集成到scrapy中


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
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM