python爬虫之Splash使用初体验

摘要:
Splash是什么:Splash是一个Javascript渲染服务。它是一个实现了HTTPAPI的轻量级浏览器,Splash是用Python实现的,同时使用Twisted和QT。为什么要有Splash:为了更加有效的制作网页爬虫,由于目前很多的网页通过javascript模式进行交互,简单的爬取网页模式无法胜任javascript页面的生成和ajax网页的爬取,同时通过分析连接请求的方式来落实局部连接数据请求,相对比较复杂,尤其是对带有特定时间戳算法的页面,分析难度较大,效率不高。鉴于上述理由Splash也就有了用武之地。

Splash是什么:

Splash是一个Javascript渲染服务。它是一个实现了HTTP API的轻量级浏览器,Splash是用Python实现的,同时使用Twisted和QT。Twisted(QT)用来让服务具有异步处理能力,以发挥webkit的并发能力。

为什么要有Splash:

为了更加有效的制作网页爬虫,由于目前很多的网页通过javascript模式进行交互,简单的爬取网页模式无法胜任javascript页面的生成和ajax网页的爬取,同时通过分析连接请求的方式来落实局部连接数据请求,相对比较复杂,尤其是对带有特定时间戳算法的页面,分析难度较大,效率不高。而通过调用浏览器模拟页面动作模式,需要使用浏览器,无法实现异步和大规模爬取需求。鉴于上述理由Splash也就有了用武之地。一个页面渲染服务器,返回渲染后的页面,便于爬取,便于规模应用。

安装条件:

操作系统要求:

Docker for Windows requires Windows 10 Pro or Enterprise version 10586, or Windows server 2016 RTM to run

安装:

首先点击下面链接,从docker官网上下载windows下的docker进行安装,不过请注意系统要求是**windows1064位 pro及以上版本或者教育版

官网下载:https://store.docker.com/editions/community/docker-ce-desktop-windows

python爬虫之Splash使用初体验第1张

安装包下载完成后以管理员身份运行。

python爬虫之Splash使用初体验第2张

查看信息:

#docker info

#docker version

python爬虫之Splash使用初体验第3张

查看启动的容器

python爬虫之Splash使用初体验第4张

在docker中下载安装Splash镜像,并安装

#docker pull scrapinghub/splash

启动splash服务

#启动splash服务,并通过http,https,telnet提供服务
#通常一般使用http模式 ,可以只启动一个8050就好  
#Splash 将运行在 0.0.0.0 at ports 8050 (http), 8051 (https) and 5023 (telnet).
docker run -p 5023:5023 -p 8050:8050 -p 8051:8051 scrapinghub/splash

python爬虫之Splash使用初体验第5张

参考链接:https://www.jianshu.com/p/4052926bc12c

Centos7安装:

准备工作

删除原来的docker包,一般情况下不用,保险起见,最好按流程走一下

$ sudo yum -y remove docker docker-common container-selinux

删除docker的selinux 同上

$ sudo yum -y remove docker-selinux

开始安装了

使用yum 安装yum-utils

$ sudo yum install -y yum-utils

增加docker源

$ sudo yum-config-manager 
--add-repo 
https://download.docker.com/linux/centos/docker-ce.repo

查看docker源是否可用

$ sudo yum-config-manager --enable docker-ce-edge
enable 为True就行

创建缓存

$ sudo yum makecache fast

使用yum安装

docker现在分为两个版本 EE(企业版) CE(社区版),这里我们选择CE版.

$ sudo yum install docker-ce

启动docker

$ sudo systemctl start docker

启动一个helloword

$ sudo docker run hello-world

这条命令会下载一个测试镜像,并启动一个容器,输出hello world 并退出,如果正常说明docker安装成功.

参考地址:https://www.cnblogs.com/colder219/p/6679255.html

使用

1、配置splash服务(以下操作全部在settings.py):

1)添加splash服务器地址:

SPLASH_URL = 'http://localhost:8050'  

2)将splash middleware添加到DOWNLOADER_MIDDLEWARE中:

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

3)Enable SplashDeduplicateArgsMiddleware:

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

4)Set a custom DUPEFILTER_CLASS:

DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'

5)a custom cache storage backend:

HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'

案例:

importscrapy
from scrapy_splash importSplashRequest
classTbtaobaoSpider(scrapy.Spider):
    name = "tbtaobao"
    allowed_domains = ["www.taobao.com"]
    start_urls = ['https://s.taobao.com/search?q=坚果&s=880&sort=sale-desc']
    defstart_requests(self):
        for url inself.start_urls:
            #yield Request(url,dont_filter=True)
            yield SplashRequest(url, self.parse, args={'wait': 0.5})
    defparse(self, response):
        print(response.text)

免责声明:文章转载自《python爬虫之Splash使用初体验》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇如何在Ubuntu 20.04 LTS上安装Redmine索尼(SONY)笔记本装系统蓝屏问题解决方案下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Debian 9 启动后进入命令行

打开 default grub 配置 $ sudo vi /etc/default/grub 修改以下3处内容 1. 找到行 GRUB_CMDLINE_LINUX_DEFAULT="quiet",加#注释掉这一行配置,修改为 #GRUB_CMDLINE_LINUX_DEFAULT="quiet" 2. 找到行 GRUB_CMDLINE_LINUX="",修...

Python自动化之pytest框架使用详解

pytest是一个非常成熟的全功能的Python测试框架,主要有以下几个特点: 简单灵活,容易上手 支持参数化 能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests) pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium(...

docker环境下Java获取cpu核心数不准确,实际上是宿主机的cpu核心数

docker环境下Java获取cpu核心数异常 一次查询线上BUG时,发现JDK获取cpu核心数不准确,导致程序运行过程中出现了不符合预期的情况,因为在线上docker环境的JDK代码中获取的cpu核心数实际上是docker宿主机的cpu核心数。 于是,网上搜索了一下,确实是存在这个情况的,这么说是因为在后来的jdk版本中,JDK增强了对docker的支持...

python 基础数据类型

python基础数据类型 一.什么是数据类型? 二.基础数据类型。 2.1数字int。 2.2布尔值bool。 2.3字符串str。 2.4元祖tuple。 2.5列表list。 2.6字典dict。 2.6集合set。 三.python基础初始总结 四.其他 一.什么是数据类型? 什么是数据类型? 我们人类可以很容易的分清数字与字符的区别,但是计算...

yum提示Another app is currently holding the yum lock; waiting for it to exit...

使用yum安装计划任务功能,结果提示: yum -y install vixie-cron 1、Loaded plugins: fastestmirror, refresh-packagekit, security 2、Existing lock /var/run/yum.pid: another copy is running as pid 25960...

【Python】批量查询-提取站长之家IP批量查询的结果加强版本v3.0

1、工具说明 写报告的时候为了细致性,要把IP地址对应的地区给整理出来。500多条IP地址找出对应地区复制粘贴到报告里整了一个上午。 为了下次更好的完成这项重复性很高的工作,所以写了这个小的脚本。 某个项目每次改需求都是这么突然。 应 XX 每天要求各种省份域名统计,再加强下Domain to IP to 地区的脚本。 Domain2ip2locality...