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编写一个基于终端的实现翻译的脚本
Apr 24 Python
用python 批量更改图像尺寸到统一大小的方法
Mar 31 Python
python 实现对文件夹内的文件排序编号
Apr 12 Python
JavaScript实现一维数组转化为二维数组
Apr 17 Python
深入浅析Python2.x和3.x版本的主要区别
Nov 30 Python
django框架实现一次性上传多个文件功能示例【批量上传】
Jun 19 Python
django foreignkey(外键)的实现
Jul 29 Python
大家都说好用的Python命令行库click的使用
Nov 07 Python
Python 类的魔法属性用法实例分析
Nov 21 Python
Python 词典(Dict) 加载与保存示例
Dec 06 Python
python如何实现word批量转HTML
Sep 30 Python
Python爬虫爬取ts碎片视频+验证码登录功能
Feb 22 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
转生史莱姆:萌王第一次撸串开心到飞起,哥布塔撸串却神似界王神
2018/11/30 日漫
一个显示天气预报的程序
2006/10/09 PHP
使用PHP连接数据库_实现用户数据的增删改查的整体操作示例
2017/09/01 PHP
显示、隐藏密码
2006/07/01 Javascript
Javascript的一种模块模式
2010/09/08 Javascript
javascript获取隐藏dom的宽高 具体实现
2013/07/14 Javascript
如何调试异步加载页面里包含的js文件
2014/10/30 Javascript
JavaScript跨平台的开源框架NativeScript
2015/03/24 Javascript
jQuery实现form表单基于ajax无刷新提交方法详解
2015/12/08 Javascript
JavaScript观察者模式(经典)
2015/12/09 Javascript
Bootstrap每天必学之级联下拉菜单
2016/03/27 Javascript
基于JS实现发送短信验证码后的倒计时功能(无视页面刷新,页面关闭不进行倒计时功能)
2016/09/02 Javascript
js捕捉键盘事件和按键键值的方法
2016/10/10 Javascript
js调用刷新界面的几种方式
2017/05/03 Javascript
基于Vue实例生命周期(全面解析)
2017/08/16 Javascript
JavaScript实现兼容IE6的收起折叠与展开效果实例
2017/09/20 Javascript
js判断节假日实例代码
2017/12/27 Javascript
JS变量提升及函数提升实例解析
2020/09/03 Javascript
详解React中共享组件逻辑的三种方式
2021/02/02 Javascript
深入理解Python中的*重复运算符
2017/10/28 Python
tensorflow 获取模型所有参数总和数量的方法
2018/06/14 Python
使用Python更换外网IP的方法
2018/07/09 Python
Python设计模式之外观模式实例详解
2019/01/17 Python
在Python文件中指定Python解释器的方法
2019/02/18 Python
python实现小球弹跳效果
2019/05/10 Python
Python 中判断列表是否为空的方法
2019/11/24 Python
python文件绝对路径写法介绍(windows)
2019/12/25 Python
TensorFlow实现checkpoint文件转换为pb文件
2020/02/10 Python
浅谈Python程序的错误:变量未定义
2020/06/02 Python
python opencv角点检测连线功能的实现代码
2020/11/24 Python
百度JavaScript笔试题
2015/01/15 面试题
在校生钳工实习自我鉴定
2013/09/19 职场文书
蔬菜基地的创业计划书
2014/01/06 职场文书
2015年学生会工作总结范文
2015/03/31 职场文书
详解CSS中的特指度和层叠问题
2021/07/15 HTML / CSS
解决persistence.xml配置文件修改存放路径的问题
2022/02/24 Java/Android