• selenium是浏览器测试自动化工具,很容易完成鼠标点击,翻页等动作,确定是一次只能加载一个页面,无法异步渲染页面,也就限制了selenium爬虫的抓取效率。

  • splash可以实现异步渲染页面,可以同时渲染几个页面。缺点是在页面点击,,模拟登陆方面没有selenium灵活。

1. 安装 docker和splash

可以看我之前写的 如何安装并启动docker和splash

https://www.cnblogs.com/zichliang/p/15796638.html

注意:!!

  1. #root用户开放8050端口
  2.  
  3. [root@wzy_woyun ~]# firewall-cmd --permanent --add-port=8050/tcp
  4.  
  5. success
  6.  
  7. [root@wzy_woyun ~]# firewall-cmd --reload
  8.  
  9. Success

普通的python 动态lua脚本

  1. 添加请求头 请求url
  1. function main(splash,args)
  2. local url=args.url
  3. splash:set_user_agent("Mozilla/5.0Chrome/69.0.3497.100Safari/537.36")
  4. splash:go(url)
  5. splash:wait(2)
  6. splash:go(url)
  7. return{
  8. html=splash:html(),
  9. png = splash:png()
  10. }
  11. end
  1. 通过滑动 来完成动态加载
  1. function main(splash, args)
  2. splash:go(args.url)
  3. local scroll_to = splash:jsfunc("window.scrollTo")
  4. scroll_to(0, 2800)
  5. splash:set_viewport_full()
  6. splash:wait(5)
  7. return {html=splash:html()}
  8. end

结合scarpy 来使用首先需要在settings中添加

  1. SPLASH_URL = 'http://192.168.2.55:8050/'
  2.  
  3. DOWNLOADER_MIDDLEWARES = {
  4. 'curreny.middlewares.ProcessAllException': 200,
  5. 'curreny.middlewares.CurrenyDownloaderMiddleware': 543,
  6. 'scrapy_splash.SplashCookiesMiddleware': 723,
  7. 'scrapy_splash.SplashMiddleware': 725,
  8. 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
  9. }
  10.  
  11. DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'
  12.  
  13. # 缓存
  14. HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'

然后 在spider中添加lua脚本

  1. """
  2.  
  3. 平潭综合实验区人民政府
  4.  
  5. """
  6. import copy
  7. import re
  8. import time
  9.  
  10. import scrapy
  11. import scrapy_splash
  12. from curreny.items import CurrenyItem
  13.  
  14. class PingtancomprehensiveexperimentgovproSpider(scrapy.Spider):
  15. name = 'PingTanComprehensiveExperimentGovPro'
  16. # allowed_domains = ['xxx.com']
  17. start_urls = ['http://www.pingtan.gov.cn/jhtml/cn/8423']
  18.  
  19. def start_requests(self):
  20. lua="""
  21. function main(splash, args)
  22. splash.images_enabled = false
  23. assert(splash:go(args.url))
  24. assert(splash:wait(1))
  25. js = string.format("document.querySelector('body > div.container > div.main.clearfix > div > div.page > span:nth-child(4) > a').click();", args.page)
  26. splash:runjs(js)
  27. assert(splash:wait(5))
  28. return splash:html()
  29. end
  30. """
  31. url="http://www.pingtan.gov.cn/jhtml/cn/8423"
  32. for page in range(1,105):
  33. yield scrapy_splash.SplashRequest(
  34. url=url,
  35. endpoint="execute",
  36. args={
  37. "url":url,
  38. "lua_source":lua,
  39. "page":page,
  40. "wait":1
  41. },
  42. callback=self.parse
  43. )
  44.  
  45. def parse(self, response,**kwargs):
  46. item = CurrenyItem()
  47.  
  48. for li in response.css("body > div.container > div.main.clearfix > div > div.info_list.list > ul > li"):
  49. item["title_url"] = 'http://www.pingtan.gov.cn' + str(li.css("a::attr(href)").get())
  50. item["title_name"] = li.css("a::attr(title)").get()
  51. item["title_date"] = li.css("span::text").get()
  52.  
  53. yield scrapy.Request(
  54. url=item['title_url'],
  55. callback=self.parse_detail,
  56. meta={'item': copy.deepcopy(item)}
  57. )
  58.  
  59. # 详情页解析
  60. def parse_detail(self, response):
  61. item = response.meta['item']
  62. item['content_html'] = response.css('.detail').get()
  63. print(item['title_name'], item['title_url'], item['title_date'], )
  64. yield item

spalsh安装及简单使用的更多相关文章

  1. (转)python requests的安装与简单运用

    requests是python的一个HTTP客户端库,跟urllib,urllib2类似,那为什么要用requests而不用urllib2呢?官方文档中是这样说明的: python的标准库urllib ...

  2. MongoDB在Windows下安装、Shell客户端的使用、Bson扩充的数据类型、MongoVUE可视化工具安装和简单使用、Robomongo可视化工具(2)

    一.Windows 下载安装 1.去http://www.mongodb.org/downloads下载,mongodb默认安装在C:\Program Files\MongoDB目录下,到F:\Off ...

  3. python requests的安装与简单运用

    requests是python的一个HTTP客户端库,跟urllib,urllib2类似,那为什么要用requests而不用urllib2呢?官方文档中是这样说明的: python的标准库urllib ...

  4. memcache的windows下的安装和简单使用

    原文:memcache的windows下的安装和简单使用 memcache是为了解决网站访问量大,数据库压力倍增的解决方案之一,由于其简单实用,很多站点现在都在使用memcache,但是memcach ...

  5. 【RabbitMQ】RabbitMQ在Windows的安装和简单的使用

    版本说明 使用当前版本:3.5.4 安装与启动 在官网上下载其Server二进制安装包,在Windows上的安装时简单的,与一般软件没什么区别. 安装前会提示你,还需要安装Erlang,并打开下载页面 ...

  6. Thrift的安装和简单演示样例

    本文仅仅是简单的解说Thrift开源框架的安装和简单使用演示样例.对于具体的解说,后面在进行阐述. Thrift简述                                           ...

  7. libmemcached安装及简单例子

    libmemcached安装及简单例子 1.下载安装libmemcached  $ wget http://launchpad.net/libmemcached/1.0/0.44/+download/ ...

  8. [hadoop系列]Pig的安装和简单演示样例

    inkfish原创,请勿商业性质转载,转载请注明来源(http://blog.csdn.net/inkfish ).(来源:http://blog.csdn.net/inkfish) Pig是Yaho ...

  9. Redis 安装与简单示例

    Redis 安装与简单示例 一.Redis的安装 Redis下载地址如下:https://github.com/dmajkic/redis/downloads 解压后根据自己机器的实际情况选择32位或 ...

随机推荐

  1. react实战系列 —— React 中的表单和路由的原理

    其他章节请看: react实战 系列 React 中的表单和路由的原理 React 中的表单是否简单好用,受控组件和非受控是指什么? React 中的路由原理是什么,如何更好的理解 React 应用的 ...

  2. win10+Android(华为)系统原生日历同步方案+Sol日历桌面显示

    前言:本文是参考了其他博客基础上,新增了Android的免费桌面[月试图显示]功能.以及适配于上海交通大学的Canvas教学日历.方便进行多设备同步的日历管理.任务提醒. 目录 1.效果展示 2.方案 ...

  3. MQ系列5:RocketMQ消息的发送模式

    MQ系列1:消息中间件执行原理 MQ系列2:消息中间件的技术选型 MQ系列3:RocketMQ 架构分析 MQ系列4:NameServer 原理解析 在之前的篇章中,我们学习了RocketMQ的原理, ...

  4. php统计IP PV和今日访问量统计方法

    php引用,在wordpress主题中 $getroot=$_SERVER['DOCUMENT_ROOT']; require_once("$getroot/countstart.php&q ...

  5. Netty整合STOMP

    1.STOMP协议简介 常用的WebSocket协议定义了两种传输信息类型:文本信息和二进制信息.类型虽然被确定,但是他们的传输体是没有规定的,也就是说传输体可以自定义成什么样的数据格式都行,只要客户 ...

  6. logstash客户端传送symantec日志到elasticsearch

    一.安装相应版本的logstash wget https://artifacts.elastic.co/downloads/beats/logstash/logstash-7.5.2-x86_64.r ...

  7. 引擎之旅 Chapter.1 高分辨率时钟

    目录 游戏中的时间线 真实时间线 游戏时间线 全局时钟的实现方式 我们如何理解时间.在现实生活中,时间就是一个有方向的直线.从一个无穷远到另一个无穷远.用数学去抽象地思考,它就是一个从无穷小到无穷大的 ...

  8. firewalld教程

    修改配置 cat firewalld.conf | grep -Ev "^#|^$" DefaultZone=trusted #主要是这个位置,必须修改trusted的 Minim ...

  9. 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 ...

  10. 实验02_Proteus仿真数码管显示报告

    一.原理总结   利用两个寄存器 R4 和 R5 来存储两个数码管的显示数字,R4 用来存储前一个数码管显示数字,而 R5 用来存储后一个数码管显示数字,利用左移操作 RLC 取 A 中首位放入 C ...