2019独角兽企业重金招聘Python工程师标准>>>

Scrapy爬虫(8)scrapy-splash的入门

2018年03月17日 16:16:36 剑与星辰 阅读数:885 标签: scrapysplash爬虫 更多

个人分类: scrapy

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jclian91/article/details/79592754

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
  • 1

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

sudo yum install docker
  • 1

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

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

sudo service docker start
sudo dock pull scrapinghub/splash
  • 1
  • 2

运行结果如下:

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

sudo docker run -p 8050:8050 scrapinghub/splash
  • 1

此时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 = FalseSPIDER_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'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

具体的配置说明可以参考:  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 requestdef 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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

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

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

转载于:https://my.oschina.net/u/3367404/blog/2088091

Scrapy爬虫(8)scrapy-splash的入门相关推荐

  1. python3 scrapy爬虫_Python3 Scrapy爬虫框架(Scrapy/scrapy-redis)

    Python3 Scrapy爬虫框架(Scrapy/scrapy-redis) 本文由 Luzhuo 编写,转发请保留该信息. 原文: https://blog..net/Rozol/article/ ...

  2. [Python爬虫] scrapy爬虫系列 一.安装及入门介绍

    前面介绍了很多Selenium基于自动测试的Python爬虫程序,主要利用它的xpath语句,通过分析网页DOM树结构进行爬取内容,同时可以结合Phantomjs模拟浏览器进行鼠标或键盘操作.但是,更 ...

  3. 二、scrapy爬虫框架——scrapy构造并发送请求

    scrapy数据建模与请求 学习目标: 应用 在scrapy项目中进行建模 应用 构造Request对象,并发送请求 应用 利用meta参数在不同的解析函数中传递数据 1. 数据建模 通常在做项目的过 ...

  4. scrapy爬虫框架[scrapy.core.scraper]ERROR downloading Error processing

    [scrapy爬虫框架ERROR downloading error processing] [scrapy.core.scraper] ERROR: Spider error processing ...

  5. 四、scrapy爬虫框架——scrapy管道的使用

    scrapy管道的使用 学习目标: 掌握 scrapy管道(pipelines.py)的使用 之前我们在scrapy入门使用一节中学习了管道的基本使用,接下来我们深入的学习scrapy管道的使用 1. ...

  6. 三、scrapy爬虫框架——scrapy模拟登陆

    scrapy模拟登陆 学习目标: 应用 请求对象cookies参数的使用 了解 start_requests函数的作用 应用 构造并发送post请求 1. 回顾之前的模拟登陆的方法 1.1 reque ...

  7. 一、scrapy爬虫框架——概念作用和工作流程 scrapy的入门使用

    scrapy的概念和流程 学习目标: 了解 scrapy的概念 了解 scrapy框架的作用 掌握 scrapy框架的运行流程 掌握 scrapy中每个模块的作用 1. scrapy的概念 Scrap ...

  8. [Python Scrapy爬虫] 二.翻页爬取农产品信息并保存本地

    前面 "Python爬虫之Selenium+Phantomjs+CasperJS" 介绍了很多Selenium基于自动测试的Python爬虫程序,主要利用它的xpath语句,通过分 ...

  9. Scrapy爬虫框架学习_intermediate

    一.Scrapy爬虫框架介绍 Scrapy是功能强大的非常快速的网络爬虫框架,是非常重要的python第三方库.scrapy不是一个函数功能库,而是一个爬虫框架. 1.1 Scrapy库的安装 pip ...

  10. 普通爬虫有啥意思,我写了个通用Scrapy爬虫

    大家好,我是Kuls.今天是来自读者剑南的投稿. 除了钱,大家还比较喜欢什么?当然是全能.万能和通用的人或事物啦,例如:全能.什么都会的员工.万能钥匙.通用爬虫等等.今天我们学习Scrapy通用爬虫, ...

最新文章

  1. HTML动画 request animation frame
  2. hadoop文件存储位置_Hadoop文件的存储格式实例详解
  3. HDU-1128 Self Numbers 筛选
  4. 线头尾两端各插入块lisp_如何在一条线段两端插入带角度得块?
  5. VirtualBox下Ubuntu利用桥接方式上网
  6. Linux中Shell循环结构for用法笔记
  7. Java获取成员变量构造函数信息
  8. d3.js 绘制极坐标图(polar plot)
  9. VB案例:素数判断与合数分解
  10. 用openswan 2.4.7构建ipsec ×××笔记
  11. swfupload添加上传进度条(转)
  12. 软件究竟是如何传播的?
  13. 四周年了,谈谈一个程序员的职场心得
  14. Full-Mesh 帧中继
  15. LINUX SHELL如何递归访问目录(处理包含空格的文件名)
  16. 怎么购买企业邮箱,企业邮箱有什么好处?
  17. qq邮箱服务器发信怎么配置,WordPress网站实现使用QQ邮箱作为SMTP发信服务器配置教程...
  18. ALSA子系统(一)------Frames Periods
  19. 【代码篇】通过三维坐标在CAD里自动输出三维模型
  20. 计算机毕业设计,Java+MySQL 高校校园招聘系统

热门文章

  1. 现代计算机系统中运算器设计一般采用的是,全国2014年4月高等教育自学考试计算机原理试题课程代码:02384...
  2. 关于修改了virc(增加了:set nu)但是vim行号还是不显示的问题
  3. 20220208--CTF MISC-- BUUCTF--二维码 1--binwalk-john-(工具的使用:分析文件/暴力破解压缩包密码)
  4. javascript---001-运行原理01_前端三大技术_JS重要性_Atwood定律_JS应用_JS让人迷惑_TypeScript会取代JS吗_JS是一门编程语言_浏览器工作原理_浏览器内核
  5. java中单例设计模式登记式单例类_java23种设计模式-创建型模式之单例模式
  6. websocket网络层详解_【技术分享】WebSocket漏洞与防护详解
  7. Csharp: Treeview check list value
  8. nightwatch testing 注意事项
  9. PHP vs Node.js vs Nginx-Lua(转)
  10. mysql 中文乱码 或 问号