scrapy-splash简单使用详解


Posted in Python onFebruary 21, 2021

1.scrapy_splash是scrapy的一个组件

scrapy_splash加载js数据基于Splash来实现的

Splash是一个Javascrapy渲染服务,它是一个实现HTTP API的轻量级浏览器,Splash是用Python和Lua语言实现的,基于Twisted和QT等模块构建

使用scrapy-splash最终拿到的response相当于是在浏览器全部渲染完成以后的网页源代码

2.scrapy_splash的作用

scrpay_splash能够模拟浏览器加载js,并返回js运行后的数据

3.scrapy_splash的环境安装

3.1 使用splash的docker镜像

docker info 查看docker信息

docker images  查看所有镜像

docker pull scrapinghub/splash  安装scrapinghub/splash

docker run -p 8050:8050 scrapinghub/splash &  指定8050端口运行

3.2.pip install scrapy-splash

3.3.scrapy 配置:

SPLASH_URL = 'http://localhost:8050'
  DOWNLOADER_MIDDLEWARES = {
    'scrapy_splash.SplashCookiesMiddleware': 723,
    'scrapy_splash.SplashMiddleware': 725,
    'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
  }
  SPIDER_MIDDLEWARES = {
    'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
  }
  DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'
  HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'

3.4.scrapy 使用

from scrapy_splash import SplashRequest
yield SplashRequest(self.start_urls[0], callback=self.parse, args={'wait': 0.5})

4.测试代码:

import datetime
import os
 
import scrapy
from scrapy_splash import SplashRequest
 
from ..settings import LOG_DIR
 
 
class SplashSpider(scrapy.Spider):
  name = 'splash'
  allowed_domains = ['biqugedu.com']
  start_urls = ['http://www.biqugedu.com/0_25/']
 
  custom_settings = {
    'LOG_FILE': os.path.join(LOG_DIR, '%s_%s.log' % (name, datetime.date.today().strftime('%Y-%m-%d'))),
    'LOG_LEVEL': 'INFO',
    'CONCURRENT_REQUESTS': 8,
    'AUTOTHROTTLE_ENABLED': True,
    'AUTOTHROTTLE_TARGET_CONCURRENCY': 8,
 
    'SPLASH_URL': 'http://localhost:8050',
    'DOWNLOADER_MIDDLEWARES': {
      'scrapy_splash.SplashCookiesMiddleware': 723,
      'scrapy_splash.SplashMiddleware': 725,
      'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
    },
    'SPIDER_MIDDLEWARES': {
      'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
    },
    'DUPEFILTER_CLASS': 'scrapy_splash.SplashAwareDupeFilter',
    'HTTPCACHE_STORAGE': 'scrapy_splash.SplashAwareFSCacheStorage',
 
  }
 
  def start_requests(self):
    yield SplashRequest(self.start_urls[0], callback=self.parse, args={'wait': 0.5})
 
  def parse(self, response):
    """
    :param response:
    :return:
    """
    response_str = response.body.decode('utf-8', 'ignore')
    self.logger.info(response_str)
    self.logger.info(response_str.find('http://www.biqugedu.com/files/article/image/0/25/25s.jpg'))

scrapy-splash接收到js请求:

scrapy-splash简单使用详解

到此这篇关于scrapy-splash简单使用详解的文章就介绍到这了,更多相关scrapy-splash 使用内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
详解Python中dict与set的使用
Aug 10 Python
Python中input与raw_input 之间的比较
Aug 20 Python
Python算法输出1-9数组形成的结果为100的所有运算式
Nov 03 Python
100行python代码实现跳一跳辅助程序
Jan 15 Python
Python下调用Linux的Shell命令的方法
Jun 12 Python
使用Python开发SQLite代理服务器的方法
Dec 07 Python
python3安装crypto出错及解决方法
Jul 30 Python
使用matplotlib绘制图例标签中带有公式的图
Dec 13 Python
Python Handler处理器和自定义Opener原理详解
Mar 05 Python
django ObjectDoesNotExist 和 DoesNotExist的用法
Jul 09 Python
django下创建多个app并设置urls方法
Aug 02 Python
Python实现区域填充的示例代码
Feb 03 Python
详解使用scrapy进行模拟登陆三种方式
Feb 21 #Python
利用Python如何画一颗心、小人发射爱心
Feb 21 #Python
python 第三方库paramiko的常用方式
Feb 20 #Python
Python中Qslider控件实操详解
Feb 20 #Python
python基于selenium爬取斗鱼弹幕
Feb 20 #Python
Python爬虫+Tkinter制作一个翻译软件的示例
Feb 20 #Python
python爬虫用request库处理cookie的实例讲解
Feb 20 #Python
You might like
国王的咖啡这么大来头,名字的由来是什么
2021/03/03 咖啡文化
提升PHP执行速度全攻略(下)
2006/10/09 PHP
PHP 批量更新网页内容实现代码
2010/01/05 PHP
PHP取整函数:ceil,floor,round,intval的区别详细解析
2013/08/31 PHP
PHP检测用户是否关闭浏览器的方法
2016/02/14 PHP
让Firefox支持event对象实现代码
2009/11/07 Javascript
JavaScript传递变量: 值传递?引用传递?
2011/02/22 Javascript
Js实现双击鼠标自动滚动屏幕的示例代码
2013/12/14 Javascript
使用JQuery实现的分页插件分享
2015/11/05 Javascript
大型JavaScript应用程序架构设计模式
2016/06/29 Javascript
JS及PHP代码编写八大排序算法
2016/07/12 Javascript
JS用斜率判断鼠标进入DIV四个方向的方法
2016/11/07 Javascript
JS实现全屏的四种写法
2016/12/30 Javascript
在javaScript中检测数据类型的几种方式小结
2017/03/04 Javascript
angularjs ui-router中路由的二级嵌套
2017/03/10 Javascript
打字效果动画的4种实现方法(超简单)
2017/10/18 Javascript
深入剖析Express cookie-parser中间件实现示例
2018/02/01 Javascript
vue组件tabbar使用方法详解
2018/11/06 Javascript
JS阻止事件冒泡的方法详解
2019/08/26 Javascript
[03:14]2014DOTA2西雅图国际邀请赛 EG战队巡礼
2014/07/07 DOTA
[01:48]完美圣典齐天大圣至宝宣传片
2016/12/17 DOTA
python中使用mysql数据库详细介绍
2015/03/27 Python
Python中用于计算对数的log()方法
2015/05/15 Python
Python3.4 tkinter,PIL图片转换
2018/06/21 Python
Python列表生成式与生成器操作示例
2018/08/01 Python
python 移动图片到另外一个文件夹的实例
2019/01/10 Python
实例详解Matlab 与 Python 的区别
2019/04/26 Python
pytorch 更改预训练模型网络结构的方法
2019/08/19 Python
python实现猜数字游戏
2020/03/25 Python
python多线程案例之多任务copy文件完整实例
2019/10/29 Python
一款纯css3实现的tab选项卡的实列教程
2014/12/11 HTML / CSS
Myprotein俄罗斯官网:欧洲第一运动营养品牌
2019/05/05 全球购物
安全责任书范文
2014/08/25 职场文书
世界气象日活动总结
2015/02/27 职场文书
Python实现生活常识解答机器人
2021/06/28 Python
oracle delete误删除表数据后如何恢复
2022/06/28 Oracle