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简单程序读取串口信息的方法
Mar 13 Python
Python使用爬虫猜密码
Feb 19 Python
python中virtualenvwrapper安装与使用
May 20 Python
Django 使用Ajax进行前后台交互的示例讲解
May 28 Python
python命名空间(namespace)简单介绍
Aug 10 Python
pytorch 模拟关系拟合——回归实例
Jan 14 Python
Python cookie的保存与读取、SSL讲解
Feb 17 Python
python对XML文件的操作实现代码
Mar 27 Python
用Python爬取LOL所有的英雄信息以及英雄皮肤的示例代码
Jul 13 Python
django filter过滤器实现显示某个类型指定字段不同值方式
Jul 16 Python
详解java调用python的几种用法(看这篇就够了)
Dec 10 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的无限分类实现想法~
2007/01/02 PHP
php使用标签替换的方式生成静态页面
2015/05/21 PHP
PHP生成plist数据的方法
2015/06/16 PHP
教你在PHPStorm中配置Xdebug
2015/07/27 PHP
Linux环境下php实现给网站截图的方法
2016/05/03 PHP
CodeIgniter框架基本增删改查操作示例
2017/03/23 PHP
javascript函数重载解决方案分享
2014/02/19 Javascript
JS实现横向与竖向两个选项卡Tab联动的方法
2015/09/27 Javascript
使用jquery/js获取iframe父子级、同级获取元素的方法
2016/08/05 Javascript
Js遍历键值对形式对象或Map形式的方法
2016/08/08 Javascript
js中获取jsp表单中radio类型的值简单实例
2016/08/15 Javascript
JQuery学习总结【二】
2016/12/01 Javascript
前端 Vue.js 和 MVVM 详细介绍
2016/12/29 Javascript
JavaScript中数组常见操作技巧
2017/09/01 Javascript
利用JS测试目标网站的打开响应速度
2017/12/01 Javascript
判断jQuery是否加载完成,没完成继续判断的解决方法
2017/12/06 jQuery
利用Promise自定义一个GET请求的函数示例代码
2019/03/20 Javascript
babel7.x和webpack4.x配置vue项目的方法步骤
2019/05/12 Javascript
Vue简单封装axios之解决post请求后端接收不到参数问题
2020/02/16 Javascript
写给新手同学的vuex快速上手指北小结
2020/04/14 Javascript
VueX模块的具体使用(小白教程)
2020/06/05 Javascript
[10:07]2014DOTA2国际邀请赛 实拍选手现场观战DK对阵Titan
2014/07/12 DOTA
Python中的二叉树查找算法模块使用指南
2014/07/04 Python
python 匹配url中是否存在IP地址的方法
2018/06/04 Python
pyqt5 从本地选择图片 并显示在label上的实例
2019/06/13 Python
pygame实现打字游戏
2021/02/19 Python
超全Python图像处理讲解(多模块实现)
2020/04/13 Python
PyTorch中的拷贝与就地操作详解
2020/12/09 Python
计算机网络专业个人的自我评价
2013/10/17 职场文书
分公司经理岗位职责
2013/11/11 职场文书
三年大学生活自我鉴定
2014/01/21 职场文书
小学毕业演讲稿
2014/04/25 职场文书
实习单位鉴定评语
2014/04/26 职场文书
寻找最美家庭活动方案
2014/08/20 职场文书
vue响应式原理与双向数据的深入解析
2021/06/04 Vue.js
在Centos 8.0中安装Redis服务器的教程详解
2022/03/21 Redis