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 相关文章推荐
SublimeText 2编译python出错的解决方法(The system cannot find the file specified)
Nov 27 Python
python的即时标记项目练习笔记
Sep 18 Python
python中文分词教程之前向最大正向匹配算法详解
Nov 02 Python
python通过微信发送邮件实现电脑关机
Jun 20 Python
Django框架实现的简单分页功能示例
Dec 04 Python
详解Appium+Python之生成html测试报告
Jan 04 Python
利用python如何在前程无忧高效投递简历
May 07 Python
Django实现whoosh搜索引擎使用jieba分词
Apr 08 Python
python 在sql语句中使用%s,%d,%f说明
Jun 06 Python
pycharm 添加解释器的方法步骤
Aug 31 Python
运行Python编写的程序方法实例
Oct 21 Python
Python爬虫基础之简单说一下scrapy的框架结构
Jun 26 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后台程序与Javascript的两种交互方式
2009/10/25 PHP
Notice: Undefined index: page in E:\PHP\test.php on line 14
2010/11/02 PHP
解析php中的fopen()函数用打开文件模式说明
2013/06/20 PHP
PHP获取二维数组中某一列的值集合
2015/12/25 PHP
PHP处理CSV表格文件的常用操作方法总结
2016/07/01 PHP
详解php curl带有csrf-token验证模拟提交方法
2018/04/18 PHP
Javascript与flash交互通信基础教程
2008/08/07 Javascript
[原创]js获取数组任意个不重复的随机数组元素
2010/03/15 Javascript
复制Input内容的js代码_支持所有浏览器,修正了Firefox3.5以上的问题
2010/06/21 Javascript
js与jquery中获取当前鼠标的x、y坐标位置的代码
2011/05/23 Javascript
jQuery代码优化 遍历篇
2011/11/01 Javascript
用Jquery.load载入页面实现局部刷新
2014/01/22 Javascript
js实现汉字排序的方法
2015/07/23 Javascript
javaScript如何跳出多重循环break、continue
2016/09/01 Javascript
jQuery实现表格与ckeckbox的全选与单选功能
2016/11/24 Javascript
微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决
2016/12/14 Javascript
vue 2.1.3 实时显示当前时间,每秒更新的方法
2018/09/16 Javascript
关于Vue Router中路由守卫的应用及在全局导航守卫中检查元字段的方法
2018/12/09 Javascript
python生成器,可迭代对象,迭代器区别和联系
2018/02/04 Python
树莓派使用USB摄像头和motion实现监控
2019/06/22 Python
12个Python程序员面试必备问题与答案(小结)
2019/06/24 Python
基于python修改srt字幕的时间轴
2020/02/03 Python
django 解决model中类写不到数据库中,数据库无此字段的问题
2020/05/20 Python
Python类绑定方法及非绑定方法实例解析
2020/10/09 Python
HTML5 WebGL 实现民航客机飞行监控系统
2019/07/25 HTML / CSS
Born鞋子官网:Born Shoes
2017/04/06 全球购物
计算机专业应届生求职信
2014/04/06 职场文书
化工操作工岗位职责
2014/04/29 职场文书
员工年终自我评价
2014/09/14 职场文书
民主评议党员自我评价材料
2014/09/18 职场文书
三严三实对照检查材料
2014/09/22 职场文书
企业党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
2014年反洗钱工作总结
2014/11/22 职场文书
2015年四年级班主任工作总结
2015/10/22 职场文书
详解MySQL InnoDB存储引擎的内存管理
2021/04/08 MySQL
JavaScript架构localStorage特殊场景下二次封装操作
2022/06/21 Javascript