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 连连看连接算法
Nov 22 Python
Python使用openpyxl读写excel文件的方法
Jun 30 Python
Python实现获取本地及远程图片大小的方法示例
Jul 21 Python
opencv实现静态手势识别 opencv实现剪刀石头布游戏
Jan 22 Python
详解python的四种内置数据结构
Mar 19 Python
Django框架模板文件使用及模板文件加载顺序分析
May 23 Python
python itchat给指定联系人发消息的方法
Jun 11 Python
Python直接赋值、浅拷贝与深度拷贝实例分析
Jun 18 Python
python操作kafka实践的示例代码
Jun 19 Python
Pytorch加载部分预训练模型的参数实例
Aug 18 Python
Python3简单爬虫抓取网页图片代码实例
Aug 26 Python
Python使用shutil模块实现文件拷贝
Jul 31 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读取30天之内的根据算法排序的代码
2008/04/06 PHP
php面向对象全攻略 (四)构造方法与析构方法
2009/09/30 PHP
PHP批量去除BOM头代码分享
2015/06/26 PHP
在Mac OS上搭建PHP的Yii框架及相关测试环境
2016/02/14 PHP
PHP如何读取由JavaScript设置的Cookie
2017/03/22 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
在b/s开发中经常用到的javaScript技术
2006/08/23 Javascript
Javascript实例教程(19) 使用HoTMetal(3)
2006/12/23 Javascript
js注意img图片的onerror事件的分析
2011/01/01 Javascript
jqeury eval将字符串转换json的方法
2011/01/20 Javascript
JQuery与JSon实现的无刷新分页代码
2011/09/13 Javascript
js中parseInt函数浅谈
2013/07/31 Javascript
JavaScript/Js脚本处理html元素的自定义属性解析(亲测兼容Firefox与IE)
2013/11/25 Javascript
jquery清空表单数据示例分享
2014/02/13 Javascript
Jquery实现兼容各大浏览器的Enter回车切换输入焦点的方法
2014/09/01 Javascript
原生js和jQuery随意改变div属性style的名称和值
2014/10/22 Javascript
使用jquery 简单实现下拉菜单
2015/01/14 Javascript
[原创]jQuery常用的4种加载方式分析
2016/07/25 Javascript
jquery.masonry瀑布流效果
2017/05/25 jQuery
JavaScript定义及输出螺旋矩阵的方法详解
2017/12/01 Javascript
Vue实现购物车详情页面的方法
2019/08/20 Javascript
解决layui页面按钮点击无反应,也不报错的问题
2019/09/29 Javascript
node.js爬虫框架node-crawler初体验
2020/10/29 Javascript
Nuxt 嵌套路由nuxt-child组件用法(父子页面组件的传值)
2020/11/05 Javascript
详解template标签用法(含vue中的用法总结)
2021/01/12 Vue.js
Python中使用Inotify监控文件实例
2015/02/14 Python
Fiddler如何抓取手机APP数据包
2016/01/22 Python
Python Django中间件,中间件函数,全局异常处理操作示例
2019/11/08 Python
Django通过dwebsocket实现websocket的例子
2019/11/15 Python
OpenCV哈里斯(Harris)角点检测的实现
2020/01/15 Python
舒适的豪华鞋:Taryn Rose
2018/05/03 全球购物
德国圣伯纳德草药屋:Kräuterhaus Sanct Bernhard(有中文站)
2018/08/05 全球购物
食堂采购员岗位职责
2014/03/17 职场文书
中考百日冲刺决心书
2015/09/22 职场文书
原生Js 实现的简单无缝滚动轮播图的示例代码
2021/05/10 Javascript
Python包argparse模块常用方法
2021/06/04 Python