31、Python快速开发分布式搜索引擎Scrapy精讲—chrome谷歌浏览器无界面运行、scrapy-splash、splinter

百度云搜索,搜各种资料:http://bdy.lqkweb.com

搜网盘,搜各种资料:http://www.swpan.cn

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 小时候总是以为别人对你好,都是善意是人性使然,是理所应当;长大的另外一个标志或许就是你知道别人对你好,对你关心...
    陈苡安阅读 3,610评论 3 0
  • 一:利用url传递参数(以 :冒号形式的形式传递参数) 具体用法: 1、在src/router/index.js...
    9979eb0cd854阅读 4,524评论 0 0
  • 2018年6月20日,晴 今天下班回到家,已经9点半了,宝贝进了卧室,我赶快收拾房子,在电磁炉上烧热水。一会儿...
    hongjuan阅读 2,806评论 0 1
  • 由于别人的错误,我们自己要埋单,有一次坐在这里进行新教师培训,这也算是忙里偷闲,坐在这里学习提升。 聆听知名教师的...
    温湾阅读 1,193评论 0 0
  • 共修功课第六十六天:觉察对方有那些特质让你不舒服,而这些特质的存在是为了帮助你提升什么呢? 引导:如果你对人充满的...
    卉美同学阅读 2,563评论 0 0

友情链接更多精彩内容