Scrapy-splash
Scrapy-splash
Splash是一个javascript渲染服务。它是一个带有HTTP API的轻量级Web浏览器,使用Twisted和QT5在Python 3中实现。QT反应器用于使服务完全异步,允许通过QT主循环利用webkit并发。
一些Splash功能:
- 并行处理多个网页
- 获取HTML源代码或截取屏幕截图
- 关闭图像或使用Adblock Plus规则使渲染更快
- 在页面上下文中执行自定义JavaScript
- 可通过Lua脚本来控制页面的渲染过程
- 在Splash-Jupyter 笔记本中开发Splash Lua脚本。
- 以HAR格式获取详细的渲染信息
1.splash安装
Scrapy-Splash的安装分为两部分,一个是Splash服务的安装,具体通过Docker来安装服务,运行服务会启动一个Splash服务,通过它的接口来实现JavaScript页面的加载;另外一个是Scrapy-Splash的Python库的安装,安装后就可在Scrapy中使用Splash服务了,下面我们分三部份来安装:
1.安装docker
pass
2.安装splash服务
docker pull scrapinghub/splash docker run -d -p 8050:8050 scrapinghub/splash
3.Python包Scrapy-Splash安装
pip3 install scrapy-splash
2.Scrapy-Splash使用
1.setting添加配置
SPIDER_MIDDLEWARES = {
'scrapy_splash.SplashDeduplicateArgsMiddleware': 100, # 配置splash服务
}
DOWNLOADER_MIDDLEWARES = {
'scrapy_splash.SplashCookiesMiddleware': 723, # 配置splash服务
'scrapy_splash.SplashMiddleware': 725, # 配置splash服务
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810, # 配置splash服务
}
# 添加splash服务器地址:
SPLASH_URL = "http://192.168.31.111:8050/"
# 设置去重过滤器:
DUPEFILTER_CLASS = "scrapy_splash.SplashAwareDupeFilter"
# 开启换成
HTTPCACHE_ENABLED = True
# 缓存超时时间
HTTPCACHE_EXPIRATION_SECS = 0
# 缓存保存路径
HTTPCACHE_DIR = 'httpcache'
# 缓存忽略的Http状态码
HTTPCACHE_IGNORE_HTTP_CODES = []
# 最后配置一个Cache存储
HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'
2.spider.py
import scrapy
from scrapy.http import Request, FormRequest
from scrapy.selector import Selector
from scrapy_splash.request import SplashRequest, SplashFormRequest
class JdSpiderSpider(scrapy.Spider):
name = 'jd_spider'
allowed_domains = ['.com']
start_urls = ['https://www.baidu.com']
def start_requests(self):
splash_args = {"lua_source": """
--splash.response_body_enabled = true
splash.private_mode_enabled = false
splash:set_user_agent("Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36")
assert(splash:go("https://item.jd.com/5089239.html"))
splash:wait(3)
return {html = splash:html()}
"""}
# yield SplashRequest("https://item.jd.com/5089239.html", endpoint='run', args=splash_args, callback=self.onSave)
yield SplashRequest("https://item.jd.com/35674728065.html", endpoint='run', args=splash_args,
callback=self.onSave)
def onSave(self, response):
value = response.xpath('//span[@class="p-price"]//text()').extract()
print(value)
def parse(self, response):
pass
def SplashRequest(url=None, callback=None, method='GET', endpoint='render.html', args=None, splash_url=None, slot_policy=SlotPolicy.PER_DOMAIN, splash_headers=None, dont_process_response=False, dont_send_headers=False, magic_response=True,
session_id='default', http_status_from_error_code=True, cache_args=None, meta=None, **kwargs):
url:与scrapy.Request中的url相同,也就是待爬取页面的url
headers:与scrapy.Request中的headers相同
cookies:与scrapy.Request中的cookies相同
args:传递给Splash的参数,如wait(等待时间),timeout(超时时间),images(是否禁止加载图片,0禁止,1不禁止), proxy(设置代理)等
args={'wait': 5,
'lua_source': source,
'proxy': 'http://proxy_ip:proxy_port'
}
endpoint:Splash服务端点,默认为'render.html',即JS页面渲染服务
splash_url:Splash服务器地址,默认为None,即使用settings.py配置文件中的SPLASH_URL = 'http://localhost:8050'
method:请求类型
def SplashFormRequest(url=None, callback=None, method=None, formdata=None,
body=None, **kwargs):
body:请求体
Scrapy-splash的更多相关文章
- scrapy splash 之一二
scrapy splash 用来爬取动态网页,其效果和scrapy selenium phantomjs一样,都是通过渲染js得到动态网页然后实现网页解析, selenium + phantomjs ...
- scrapy+splash 爬取京东动态商品
作业来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/3159 splash是容器安装的,从docker官网上下载windows下的 ...
- Scrapy+splash报错 Connection was refused by other side
报错信息如下: Traceback (most recent call last): File "/usr/local/lib/python3.7/site-packages/scrap ...
- Scrapy爬虫框架(实战篇)【Scrapy框架对接Splash抓取javaScript动态渲染页面】
(1).前言 动态页面:HTML文档中的部分是由客户端运行JS脚本生成的,即服务器生成部分HTML文档内容,其余的再由客户端生成 静态页面:整个HTML文档是在服务器端生成的,即服务器生成好了,再发送 ...
- python splash scrapy
python splash scrapy 1. 前言 slpash是一个渲染引擎,它有自己的api,可以直接访问splash服务的http接口,但也有对应的包python-splash方便调 ...
- scrapy 动态网页处理——爬取鼠绘海贼王最新漫画
简介 scrapy是基于python的爬虫框架,易于学习与使用.本篇文章主要介绍如何使用scrapy爬取鼠绘漫画网海贼王最新一集的漫画. 源码参见:https://github.com/liudaol ...
- 爬虫之scrapy-splash
什么是splash Splash是一个Javascript渲染服务.它是一个实现了HTTP API的轻量级浏览器,Splash是用Python实现的,同时使用Twisted和QT.Twisted(QT ...
- Facebook 爬虫
title: Facebook 爬虫 tags: [python3, facebook, scrapy, splash, 爬虫] date: 2018-06-02 09:42:06 categorie ...
- 爬虫、网页测试 及 java servlet 测试框架等介绍
scrapy 抓取网页并存入 mongodb的完整示例: https://github.com/rmax/scrapy-redis https://github.com/geekan/scrapy-e ...
- python的分布式爬虫框架
scrapy + celery: Scrapy原生不支持js渲染,需要单独下载[scrapy-splash](GitHub - scrapy-plugins/scrapy-splash: Scrapy ...
随机推荐
- 子传父flase注意点
1==>在子传递数据给父亲的时候, closeBottom(){ this.$emit("closeBottom",false) } false不加引号. 2==>
- 四、排序算法总结二(归并排序)(C++版本)
一.什么是归并排序? 归并排序是基于分而治之的思想建立起来的. 所谓的分而治之,也就是将一个数据规模为N的数据集,分解为两个规模大小差不多的数据集(n/2),然而分别处理这两个更小的问题,就相当于解决 ...
- 05. Go 语言函数
Go 语言函数 函数是组织好的.可重复使用的.用来实现单一或相关联功能的代码段,其可以提高应用的模块性和代码的重复利用率. Go 语言支持普通函数.匿名函数和闭包,从设计上对函数进行了优化和改进,让函 ...
- MySQL多表查询综合练习答案
目录 一.综合练习 1.1 init.sql文件内容 1.2 从init.sql文件中导入数据 1.3 基础练习 1.4 进阶练习 二.基础练习答案 三.进阶练习答案 一.综合练习 1.1 init. ...
- 【STM32H7教程】第19章 STM32H7的GPIO应用之按键FIFO
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第19章 STM32H7的GPIO应用之按键FIF ...
- 【踩坑系列】VS2019提示 ' the package could not be found in c\users\username\nuget\packages\. '
解决步骤 1.删除对应项目下的 obj 文件夹 2.重新生成该项目
- python基础(3):变量、常量、注释、基本数据类型
1. 变量 变量:将运算的中间结果暂存到内存,以便后续程序调⽤. 可以直接运算,如下所示: print(3+5+6) print((3+5+6)*12) print(((3+5+6)*12)+3) p ...
- java基础(29):JDBC、DBUtils
1. JDBC 1.1 JDBC概述 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问 ...
- Python 3 行代码 5 秒抠图的 AI 神器,根本无需 PS
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 苏克1900 PS:如有需要Python学习资料的小伙伴可以加点击下 ...
- Asp.net MVC 中的TempData对象的剖析
另一篇文章,也对TempData 做了很详细的介绍,链接地址:https://www.jianshu.com/p/eb7a301bc536 . MVC中的 TempData 可以在Controll ...