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 03 Python
Python遍历目录并批量更换文件名和目录名的方法
Sep 19 Python
django model去掉unique_together报错的解决方案
Oct 18 Python
Python3.6.0+opencv3.3.0人脸检测示例
May 25 Python
django框架事务处理小结【ORM 事务及raw sql,customize sql 事务处理】
Jun 27 Python
python实现kNN算法识别手写体数字的示例代码
Aug 16 Python
python模拟点击网页按钮实现方法
Feb 25 Python
关于Python 中的时间处理包datetime和arrow的方法详解
Mar 19 Python
Python函数必须先定义,后调用说明(函数调用函数例外)
Jun 02 Python
keras实现VGG16 CIFAR10数据集方式
Jul 07 Python
详解Python描述符的工作原理
Jun 11 Python
python机器学习Github已达8.9Kstars模型解释器LIME
Nov 23 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教程 基本语法
2009/10/23 PHP
迅速确定php多维数组的深度的方法
2014/01/07 PHP
解决laravel groupBy 对查询结果进行分组出现的问题
2019/10/09 PHP
Javascript里使用Dom操作Xml
2007/01/22 Javascript
JQuery Study Notes 学习笔记(一)
2010/08/04 Javascript
javascript 基础篇2 数据类型,语句,函数
2012/03/14 Javascript
Jquery 模板数据绑定插件的使用方法详解
2013/07/08 Javascript
js换图片效果可进行定时操作
2014/06/09 Javascript
JS+CSS实现带关闭按钮DIV弹出窗口的方法
2015/02/27 Javascript
AngularJS基础学习笔记之指令
2015/05/10 Javascript
3个可以改善用户体验的AngularJS指令介绍
2015/06/18 Javascript
Jquery实现仿京东商城省市联动菜单
2015/11/19 Javascript
详解js图片轮播效果实现原理
2015/12/17 Javascript
5个最顶级jQuery图表类库插件【jquery插件库】
2016/05/05 Javascript
分享jQuery网页元素拖拽插件
2020/12/01 Javascript
Angular设置title信息解决SEO方面存在问题
2016/08/19 Javascript
AngularJS中$http服务常用的应用及参数
2016/08/22 Javascript
Bootstrap源码解读导航条(7)
2016/12/23 Javascript
浅谈js的解析顺序 作用域 严格模式
2017/10/23 Javascript
Vue组件之自定义事件的功能图解
2018/02/01 Javascript
JS与CSS3实现图片响应鼠标移动放大效果示例
2018/05/04 Javascript
看看“疫苗查询”小程序有温度的代码
2018/07/31 Javascript
vue限制输入框只能输入8位整数和2位小数的代码
2019/11/06 Javascript
Python中使用PDB库调试程序
2015/04/05 Python
Python多线程爬虫简单示例
2016/03/04 Python
python2.7读取文件夹下所有文件名称及内容的方法
2018/02/24 Python
Python 去除字符串中指定字符串
2020/03/05 Python
Python新手学习函数默认参数设置
2020/06/03 Python
Python return语句如何实现结果返回调用
2020/10/15 Python
Python 将代码转换为可执行文件脱离python环境运行(步骤详解)
2021/01/25 Python
解决pycharm 格式报错tabs和space不一致问题
2021/02/26 Python
德国在线香料制造商:Gewürzland
2020/03/10 全球购物
数据库基础的一些面试题
2012/02/25 面试题
业务经理的岗位职责
2013/11/16 职场文书
班级活动策划书
2014/02/06 职场文书
项目委托协议书(最新)
2014/09/13 职场文书