spalsh安装及简单使用
selenium是浏览器测试自动化工具,很容易完成鼠标点击,翻页等动作,确定是一次只能加载一个页面,无法异步渲染页面,也就限制了selenium爬虫的抓取效率。
splash可以实现异步渲染页面,可以同时渲染几个页面。缺点是在页面点击,,模拟登陆方面没有selenium灵活。
1. 安装 docker和splash
可以看我之前写的 如何安装并启动docker和splash
https://www.cnblogs.com/zichliang/p/15796638.html
注意:!!
- #root用户开放8050端口
- [root@wzy_woyun ~]# firewall-cmd --permanent --add-port=8050/tcp
- success
- [root@wzy_woyun ~]# firewall-cmd --reload
- Success
普通的python 动态lua脚本
- 添加请求头 请求url
- function main(splash,args)
- local url=args.url
- splash:set_user_agent("Mozilla/5.0Chrome/69.0.3497.100Safari/537.36")
- splash:go(url)
- splash:wait(2)
- splash:go(url)
- return{
- html=splash:html(),
- png = splash:png()
- }
- end
- 通过滑动 来完成动态加载
- function main(splash, args)
- splash:go(args.url)
- local scroll_to = splash:jsfunc("window.scrollTo")
- scroll_to(0, 2800)
- splash:set_viewport_full()
- splash:wait(5)
- return {html=splash:html()}
- end
结合scarpy 来使用首先需要在settings中添加
- SPLASH_URL = 'http://192.168.2.55:8050/'
- DOWNLOADER_MIDDLEWARES = {
- 'curreny.middlewares.ProcessAllException': 200,
- 'curreny.middlewares.CurrenyDownloaderMiddleware': 543,
- 'scrapy_splash.SplashCookiesMiddleware': 723,
- 'scrapy_splash.SplashMiddleware': 725,
- 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
- }
- DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'
- # 缓存
- HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'
然后 在spider中添加lua脚本
- """
- 平潭综合实验区人民政府
- """
- import copy
- import re
- import time
- import scrapy
- import scrapy_splash
- from curreny.items import CurrenyItem
- class PingtancomprehensiveexperimentgovproSpider(scrapy.Spider):
- name = 'PingTanComprehensiveExperimentGovPro'
- # allowed_domains = ['xxx.com']
- start_urls = ['http://www.pingtan.gov.cn/jhtml/cn/8423']
- def start_requests(self):
- lua="""
- function main(splash, args)
- splash.images_enabled = false
- assert(splash:go(args.url))
- assert(splash:wait(1))
- js = string.format("document.querySelector('body > div.container > div.main.clearfix > div > div.page > span:nth-child(4) > a').click();", args.page)
- splash:runjs(js)
- assert(splash:wait(5))
- return splash:html()
- end
- """
- url="http://www.pingtan.gov.cn/jhtml/cn/8423"
- for page in range(1,105):
- yield scrapy_splash.SplashRequest(
- url=url,
- endpoint="execute",
- args={
- "url":url,
- "lua_source":lua,
- "page":page,
- "wait":1
- },
- callback=self.parse
- )
- def parse(self, response,**kwargs):
- item = CurrenyItem()
- for li in response.css("body > div.container > div.main.clearfix > div > div.info_list.list > ul > li"):
- item["title_url"] = 'http://www.pingtan.gov.cn' + str(li.css("a::attr(href)").get())
- item["title_name"] = li.css("a::attr(title)").get()
- item["title_date"] = li.css("span::text").get()
- yield scrapy.Request(
- url=item['title_url'],
- callback=self.parse_detail,
- meta={'item': copy.deepcopy(item)}
- )
- # 详情页解析
- def parse_detail(self, response):
- item = response.meta['item']
- item['content_html'] = response.css('.detail').get()
- print(item['title_name'], item['title_url'], item['title_date'], )
- yield item
spalsh安装及简单使用的更多相关文章
- (转)python requests的安装与简单运用
requests是python的一个HTTP客户端库,跟urllib,urllib2类似,那为什么要用requests而不用urllib2呢?官方文档中是这样说明的: python的标准库urllib ...
- MongoDB在Windows下安装、Shell客户端的使用、Bson扩充的数据类型、MongoVUE可视化工具安装和简单使用、Robomongo可视化工具(2)
一.Windows 下载安装 1.去http://www.mongodb.org/downloads下载,mongodb默认安装在C:\Program Files\MongoDB目录下,到F:\Off ...
- python requests的安装与简单运用
requests是python的一个HTTP客户端库,跟urllib,urllib2类似,那为什么要用requests而不用urllib2呢?官方文档中是这样说明的: python的标准库urllib ...
- memcache的windows下的安装和简单使用
原文:memcache的windows下的安装和简单使用 memcache是为了解决网站访问量大,数据库压力倍增的解决方案之一,由于其简单实用,很多站点现在都在使用memcache,但是memcach ...
- 【RabbitMQ】RabbitMQ在Windows的安装和简单的使用
版本说明 使用当前版本:3.5.4 安装与启动 在官网上下载其Server二进制安装包,在Windows上的安装时简单的,与一般软件没什么区别. 安装前会提示你,还需要安装Erlang,并打开下载页面 ...
- Thrift的安装和简单演示样例
本文仅仅是简单的解说Thrift开源框架的安装和简单使用演示样例.对于具体的解说,后面在进行阐述. Thrift简述 ...
- libmemcached安装及简单例子
libmemcached安装及简单例子 1.下载安装libmemcached $ wget http://launchpad.net/libmemcached/1.0/0.44/+download/ ...
- [hadoop系列]Pig的安装和简单演示样例
inkfish原创,请勿商业性质转载,转载请注明来源(http://blog.csdn.net/inkfish ).(来源:http://blog.csdn.net/inkfish) Pig是Yaho ...
- Redis 安装与简单示例
Redis 安装与简单示例 一.Redis的安装 Redis下载地址如下:https://github.com/dmajkic/redis/downloads 解压后根据自己机器的实际情况选择32位或 ...
随机推荐
- react实战系列 —— React 中的表单和路由的原理
其他章节请看: react实战 系列 React 中的表单和路由的原理 React 中的表单是否简单好用,受控组件和非受控是指什么? React 中的路由原理是什么,如何更好的理解 React 应用的 ...
- win10+Android(华为)系统原生日历同步方案+Sol日历桌面显示
前言:本文是参考了其他博客基础上,新增了Android的免费桌面[月试图显示]功能.以及适配于上海交通大学的Canvas教学日历.方便进行多设备同步的日历管理.任务提醒. 目录 1.效果展示 2.方案 ...
- MQ系列5:RocketMQ消息的发送模式
MQ系列1:消息中间件执行原理 MQ系列2:消息中间件的技术选型 MQ系列3:RocketMQ 架构分析 MQ系列4:NameServer 原理解析 在之前的篇章中,我们学习了RocketMQ的原理, ...
- php统计IP PV和今日访问量统计方法
php引用,在wordpress主题中 $getroot=$_SERVER['DOCUMENT_ROOT']; require_once("$getroot/countstart.php&q ...
- Netty整合STOMP
1.STOMP协议简介 常用的WebSocket协议定义了两种传输信息类型:文本信息和二进制信息.类型虽然被确定,但是他们的传输体是没有规定的,也就是说传输体可以自定义成什么样的数据格式都行,只要客户 ...
- logstash客户端传送symantec日志到elasticsearch
一.安装相应版本的logstash wget https://artifacts.elastic.co/downloads/beats/logstash/logstash-7.5.2-x86_64.r ...
- 引擎之旅 Chapter.1 高分辨率时钟
目录 游戏中的时间线 真实时间线 游戏时间线 全局时钟的实现方式 我们如何理解时间.在现实生活中,时间就是一个有方向的直线.从一个无穷远到另一个无穷远.用数学去抽象地思考,它就是一个从无穷小到无穷大的 ...
- firewalld教程
修改配置 cat firewalld.conf | grep -Ev "^#|^$" DefaultZone=trusted #主要是这个位置,必须修改trusted的 Minim ...
- CentOS7配置nodejs环境
# 安装 wget https://nodejs.org/dist/v12.18.3/node-v12.18.3-linux-x64.tar.xz tar xf node-v12.18.3-linux ...
- 实验02_Proteus仿真数码管显示报告
一.原理总结 利用两个寄存器 R4 和 R5 来存储两个数码管的显示数字,R4 用来存储前一个数码管显示数字,而 R5 用来存储后一个数码管显示数字,利用左移操作 RLC 取 A 中首位放入 C ...