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 22 Python
python中set常用操作汇总
Jun 30 Python
学习Python selenium自动化网页抓取器
Jan 20 Python
python实现音乐下载器
Apr 15 Python
Python3.7实现中控考勤机自动连接
Aug 28 Python
详解python中的Turtle函数库
Nov 19 Python
Python 调用PIL库失败的解决方法
Jan 08 Python
python使用pymongo操作mongo的完整步骤
Apr 13 Python
对Django外键关系的描述
Jul 26 Python
selenium+python配置chrome浏览器的选项的实现
Mar 18 Python
python小程序之4名牌手洗牌发牌问题解析
May 15 Python
Python爬取某拍短视频
Jun 11 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
php中require和require_once的区别说明
2014/02/27 PHP
PHP动态页生成静态页的3种常用方法
2014/11/13 PHP
PHP+MySQL插入操作实例
2015/01/21 PHP
php获取文件名后缀常用方法小结
2015/02/24 PHP
Joomla使用Apache重写模式的方法
2016/05/04 PHP
PHP基于迭代实现文件夹复制、删除、查看大小等操作的方法
2017/08/11 PHP
PHP实现的ID混淆算法类与用法示例
2018/08/10 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
2019/12/20 PHP
PHP单元测试配置与使用方法详解
2019/12/27 PHP
TNC vs BOOM BO3 第二场2.13
2021/03/10 DOTA
ExtJS 2.0实用简明教程 之Border区域布局
2009/04/29 Javascript
jQuery事件绑定.on()简要概述及应用
2013/02/07 Javascript
再JavaScript的jQuery库中编写动画效果的指南
2015/08/13 Javascript
IntelliJ IDEA 安装vue开发插件的方法
2017/11/21 Javascript
VueJs监听window.resize方法示例
2018/01/17 Javascript
JavaScript递归函数解“汉诺塔”算法代码解析
2018/07/05 Javascript
D3.js(v3)+react 实现带坐标与比例尺的散点图 (V3版本)
2019/05/09 Javascript
Vue开发环境中修改端口号的实现方法
2019/08/15 Javascript
浅谈layui 数据表格前后台传值的问题
2019/09/12 Javascript
angular组件间通讯的实现方法示例
2020/05/07 Javascript
区分vue-router的hash和history模式
2020/10/03 Javascript
[49:05]OG vs Newbee 2019DOTA2国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
Python使用openpyxl读写excel文件的方法
2017/06/30 Python
python得到一个excel的全部sheet标签值方法
2018/12/10 Python
基于python生成器封装的协程类
2019/03/20 Python
Python中使用pypdf2合并、分割、加密pdf文件的代码详解
2019/05/21 Python
python交互模式下输入换行/输入多行命令的方法
2019/07/02 Python
python模拟鼠标点击和键盘输入的操作
2019/08/04 Python
python中自带的三个装饰器的实现
2019/11/08 Python
使用Python实现正态分布、正态分布采样
2019/11/20 Python
解决Firefox下不支持outerHTML问题代码分享
2014/06/04 HTML / CSS
viagogo英国票务平台:演唱会、体育比赛、戏剧门票
2017/03/24 全球购物
电气工程及其自动化专业求职信
2014/06/23 职场文书
2014第二批党的群众路线教育实践活动对照检查材料思想汇报
2014/09/18 职场文书
学校开除通知书
2015/04/25 职场文书
python3操作redis实现List列表实例
2021/08/04 Python