乐趣区

关于scrapy:30将selenium操作谷歌浏览器集成到scrapy中

【百度云搜寻,搜各种材料:http://www.lqkweb.com】
【搜网盘,搜各种材料:http://www.swpan.cn】

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
}
退出移动版