spalsh安装及简单使用
2024-10-21 02:42:01
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
最新文章
- Maven的pom.xml 配置详解
- Linux 服务器监控
- JS中循环绑定遇到的问题及解决方法
- atitit. access token是什么??微信平台公众号开发access_token and Web session保持状态机制
- php apc
- IOS Suppot Font 苹果默认支持的字体一览2(普通,加粗,倾斜)
- OpenStack-Mitaka 一键安装测试环境脚本
- ajax_jsonp —— 跨域
- Peter Pan By: J. M. Barrie
- Android Studio builde.gradle 配置说明
- Python爬虫-爬小说
- C++静态库与动态库(转)
- Windows用户模式下注入方式总结
- Error:Execution failed for task ':app:processDebugManifest'.
- DjangoRestFramework 学习之restful规范 APIview 解析器组件 Postman等
- easy-ui treegrid 实现分页 并且添加自定义checkbox
- 【数学建模】day09-聚类分析
- javascript高级程序设计第3版——第二章使用javascript
- golang学习笔记6 beego项目路由设置
- Oracle学习笔记(四)
热门文章
- SecureCRT 和 Xshell 连接ENSP 教程
- ArkUI 页面路由
- Javascript实现base64的加密解密方法
- java基础学习:java中的反射
- 【ajax】发送请求 —— 结合【express】框架 { }
- JS输出内容为[object Object]
- 对比es6class类和构造函数
- Fielddata is disabled on text fields by default Set fielddata=true on [service.address]
- Elasticsearch 主从同步之跨集群复制
- kibana知识点