zoukankan      html  css  js  c++  java
  • 第三百五十二节,Python分布式爬虫打造搜索引擎Scrapy精讲—chrome谷歌浏览器无界面运行、scrapy-splash、splinter


    第三百五十二节,Python分布式爬虫打造搜索引擎Scrapy精讲—chrome谷歌浏览器无界面运行、scrapy-splash、 splinter

    1、chrome谷歌浏览器无界面运行

    chrome谷歌浏览器无界面运行,主要运行在Linux系统,windows系统下不支持

    chrome谷歌浏览器无界面运行需要一个模块,pyvirtualdisplay模块

    需要先安装pyvirtualdisplay模块

    Display(visible=0, size=(800, 600))设置浏览器,visible=0表示不显示界面,size=(800, 600)表示浏览器尺寸

    # -*- 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):                                                                                 #初始化
    
            from pyvirtualdisplay import Display
            display = Display(visible=0, size=(800, 600))
            display.start()
    
            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)

     注意:Linux系统下会出现错误

    报错:easyprocess.EasyProcessCheckInstalledError: cmd=['Xvfb', '-help'] OSError=[Errno 2] No such file or directory

    需要两个步骤解决

      1.执行命令:sudo apt-get install xvfb    安装xvfb软件

      2.执行命令:pip install xvfbwrapper   安装xvfbwrapper模块

    以下只是提到一下,前面讲的selenium模块操作浏览器已经够用了

    2、scrapy-splash,也是scrapy获取动态网页的方案,这里就不介绍了,详情:https://github.com/scrapy-plugins/scrapy-splash

    3、splinter,是一个操作浏览器的模块 详情:https://github.com/cobrateam/splinter

  • 相关阅读:
    Appium 服务命令行参数
    DC 输入 输出 时钟 PVT设置
    .synopsys_dc.setup编写
    Excel VBA编程常用语句300句
    C# 泛型单例工厂
    C# Winform与JS交互
    SQL分析“聚集索引、非聚集索引”区别
    C# ClassHelper动态创建程序集和类, 添加/删除类属性
    从30个角度对比 PostgreSQL 和 MySQL
    C# 常用类和命名空间
  • 原文地址:https://www.cnblogs.com/adc8868/p/7433126.html
Copyright © 2011-2022 走看看