Scrapy-Splash的介绍、安装以及实例

scrapy-splash的介绍

??在前面的博客中,我们已经见识到了Scrapy的强大之处。但是,Scrapy也有其不足之处,即Scrapy没有JS engine, 因此它无法爬取JavaScript生成的动态网页,只能爬取静态网页,而在现代的网络世界中,大部分网页都会采用JavaScript来丰富网页的功能。所以,这无疑Scrapy的遗憾之处。

??那么,我们还能愉快地使用Scrapy来爬取动态网页吗?有没有什么补充的办法呢?答案依然是yes!答案就是,使用scrapy-splash模块

??scrapy-splash模块主要使用了Splash. 所谓的Splash, 就是一个Javascript渲染服务。它是一个实现了HTTP API的轻量级浏览器,Splash是用Python实现的,同时使用Twisted和QT。Twisted(QT)用来让服务具有异步处理能力,以发挥webkit的并发能力。Splash的特点如下:

  • 并行处理多个网页
  • 得到HTML结果以及(或者)渲染成图片
  • 关掉加载图片或使用 Adblock Plus规则使得渲染速度更快
  • 使用JavaScript处理网页内容
  • 使用Lua脚本
  • 能在Splash-Jupyter Notebooks中开发Splash Lua scripts
  • 能够获得具体的HAR格式的渲染信息

scrapy-splash的安装

??由于Splash的上述特点,使得Splash和Scrapy两者的兼容性较好,抓取效率较高。

??听了上面的介绍,有没有对scrapy-splash很心动呢?下面就介绍如何安装scrapy-splash,步骤如下:

??1. 安装scrapy-splash模块

pip3 install scrapy-splash

??2. scrapy-splash使用的是Splash HTTP API, 所以需要一个splash instance,一般采用docker运行splash,所以需要安装docker。不同系统的安装命令会不同,如笔者的CentOS7系统的安装方式为:

sudo yum install docker

安装完docker后,可以输入命令‘docker -v’来验证docker是否安装成功。

??3. 开启docker服务,拉取splash镜像(pull the image):

sudo service docker start
sudo dock pull scrapinghub/splash

运行结果如下:

??4. 开启容器(start the container):

sudo docker run -p 8050:8050 scrapinghub/splash

此时Splash以运行在本地服务器的端口8050(http).在浏览器中输入‘localhost:8050‘, 页面如下:

在这个网页中我们能够运行Lua scripts,这对我们在scrapy-splash中使用Lua scripts是非常有帮助的。以上就是我们安装scrapy-splash的全部。

scrapy-splash的实例

??在安装完scrapy-splash之后,不趁机介绍一个实例,实在是说不过去的,我们将在此介绍一个简单的实例,那就是利用百度查询手机号码信息。比如,我们在百度输入框中输入手机号码‘159********’,然后查询,得到如下信息:

我们将利用scrapy-splash模拟以上操作并获取手机号码信息。

??1. 创建scrapy项目phone

??2. 配置settings.py文件,配置的内容如下:

ROBOTSTXT_OBEY = False

SPIDER_MIDDLEWARES = {
    ‘scrapy_splash.SplashDeduplicateArgsMiddleware‘: 100,
}

DOWNLOADER_MIDDLEWARES = {
    ‘scrapy_splash.SplashCookiesMiddleware‘: 723,
    ‘scrapy_splash.SplashMiddleware‘: 725,
    ‘scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware‘: 810
}

SPLASH_URL = ‘http://localhost:8050‘

DUPEFILTER_CLASS = ‘scrapy_splash.SplashAwareDupeFilter‘
HTTPCACHE_STORAGE = ‘scrapy_splash.SplashAwareFSCacheStorage‘

具体的配置说明可以参考:? https://pypi.python.org/pypi/scrapy-splash .

??3. 创建爬虫文件phoneSpider.py, 代码如下:

# -*- coding: utf-8 -*-
from scrapy import Spider, Request
from scrapy_splash import SplashRequest

# splash lua script
script = """
         function main(splash, args)
             assert(splash:go(args.url))
             assert(splash:wait(args.wait))
             js = string.format("document.querySelector(‘#kw‘).value=%s;document.querySelector(‘#su‘).click()", args.phone)
             splash:evaljs(js)
             assert(splash:wait(args.wait))
             return splash:html()
         end
         """

class phoneSpider(Spider):
    name = ‘phone‘
    allowed_domains = [‘www.baidu.com‘]
    url = ‘https://www.baidu.com‘

    # start request
    def start_requests(self):
        yield SplashRequest(self.url, callback=self.parse, endpoint=‘execute‘, args={‘lua_source‘: script, ‘phone‘:‘159*******‘, ‘wait‘: 5})

    # parse the html content
    def parse(self, response):
        info = response.css(‘div.op_mobilephone_r.c-gap-bottom-small‘).xpath(‘span/text()‘).extract()
        print(‘=‘*40)
        print(‘‘.join(info))
        print(‘=‘*40)

??4. 运行爬虫,scrapy crawl phone, 结果如下:

??实例展示到此结束,欢迎大家访问这个项目的Github地址: ?https://github.com/percent4/phoneSpider .当然,有什么问题,也可以载下面留言评论哦~~

原文地址:https://www.cnblogs.com/jclian91/p/8590617.html

时间: 2024-10-09 07:15:11

Scrapy-Splash的介绍、安装以及实例的相关文章

TensorFlow安装及实例-(Ubuntu16.04.1 & Anaconda3)

TensorFlow安装及实例-(Ubuntu16.04.1 & Anaconda3) Python-pip 和python-dev Pip是python的默认包管理器,直接用pip安装TensorFlow,安装这两个包 命令:apt-get install python-pip python-dev python-virtualenv 可以virtualenv 创建一个隔离的容器, 来安装 TensorFlow. 这是可选的,这样做能使排查安装问题变得更容易. 安装Anaconda3 命令:b

[转]一个完整的Installshield安装程序实例

Installshield安装程序实例—基本设置一 前言 Installshield可以说是最好的做安装程序的商业软件之一,不过因为功能的太过于强大,以至于上手和精通都不是容易的事情,之前都是用Installshield的Project Assistant对付过去的,这次做这个安装程序,为了实现一些功能,必须写代码,国内外现成的资料很少,而且很多都语焉不详,自己反复啃了多次,对比Installshiel自带的help,才明白资料所表达的意思.这个安装程序虽然比较简陋,在行家眼里可能是小菜一碟,但

tcpreplay工具安装-配置-实例

tcpreplay工具安装-配置-实例 TCPReplay是一个非常强大的集成工具,其中主要包括TCPReplay.TCPPrepare.TCPrewrite工具,根据其具体参数对.pcap文件进行更改,然后重放数据包. 使用条件:Linux操作系统.双网卡 对TCPReplay工具分3个部分来讲解,第一部分安装一个操作linux操作系统.第二部分安装TCPReplay以及相关组件.举一个实例来分析相关参数意义. 一.          Ubuntu12的USB安装过程或者硬盘安装过程,在WIN

一个完整的Installshield安装程序实例-转

一个完整的Installshield安装程序实例-艾泽拉斯之海洋女神出品(一)---基本设置一 前言 Installshield可以说是最好的做安装程序的商业软件之一,不过因为功能的太过于强大,以至于上手和精通都不是容易的事情,之前都是用Installshield的Project Assistant对付过去的,这次做这个安装程序,为了实现一些功能,必须写代码,国内外现成的资料很少,而且很多都语焉不详,自己反复啃了多次,对比Installshiel自带的help,才明白资料所表达的意思.这个安装程

详解“FTP文件传输服务”安装配置实例

"FTP文件传输服务"安装配置实例 家住海边喜欢浪:zhang789.blog.51cto.com 目录 简介 ftp工作原理 常见的FTP服务 Vsftpd服务器的安装 Vsftpd.conf配置文件详解 配置FTP服务器实例 实例:配置匿名用户 实例:配置本地用户登录 实例:配置虚拟用户登录(MySQL认证) 实例:控制用户登录 实例:设置欢迎信息 分析vsftpd日志管理 FTP服务器配置与管理 简介 FTP 是File Transfer Protocol(文件传输协议)的英文简

Maven-002-eclipse 插件安装及实例

因为平常编码的时候,习惯了使用 eclipse 进行编码,因而需要将 eclipse 安装 maven 的插件,安装步骤如下所示: 一.安装 选择菜单: help -> Install New Software 安装 Maven 插件,所需的在线安装地址如下所示 m2eclipse Core Update Site: http://m2eclipse.sonatype.org/sites/m2e 查找到所需安装的 maven 插件,点击 Next 安装即可,若下图所示. 二.配置 安装完成后,重

win7扫盲篇--介绍安装(1)

1.硬件+操作系统+软件应用=用户电脑 2.win7  2007年 winXP 2001年  不能兼容64位 win98 1998年 UNIX  银行操作系统 Linux开源自由的操作系统,安全稳定比较出色,在服务领域使用广泛,安卓是基于Linux操作系统 Mac OS苹果操作系统 MS-DOS 命令行操作 3.win7版本 win7家庭普通版的功能最少,简装版本 win7旗舰版,功能最多 硬件需求 cpu1GH以上,内存1G以上,硬盘16G以上,32位最多支持3个G得内存 cpu1GH以上,内

Linux Epoll介绍和程序实例

1. Epoll是何方神圣? Epoll但是当前在Linux下开发大规模并发网络程序的热门人选,Epoll 在Linux2.6内核中正式引入,和select类似,事实上都I/O多路复用技术而已,并没有什么神奇的. 事实上在Linux下设计并发网络程序,向来不缺少方法,比方典型的Apache模型(Process Per Connection,简称PPC),TPC(Thread PerConnection)模型,以及select模型和poll模型,那为何还要再引入Epoll这个东东呢?那还是有得说说

php session_id()函数介绍及代码实例

session_id()功能: 获取设置当前回话ID. 函数说明: string session_id ([ string $id ] ) 参数: 如果指定了参数$id,那么函数会替换当前的回话id. session_id()函数必须在session_start()函数之前调用. 返回值: session_id返回当前会话id字符串.如果当前没有产生会话,则返回空字符串"". 代码示例1: 输出 session_id() 1 2 3 4 <?php     session_sta