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 04 Python
Python赋值语句后逗号的作用分析
Jun 08 Python
深入理解python中的select模块
Apr 23 Python
Python3.6连接Oracle数据库的方法详解
May 18 Python
Python实现快速计算词频功能示例
Jun 25 Python
python绘制立方体的方法
Jul 02 Python
在Pycharm中设置默认自动换行的方法
Jan 16 Python
Django框架之中间件MiddleWare的实现
Dec 30 Python
python给指定csv表格中的联系人群发邮件(带附件的邮件)
Dec 31 Python
使用Python制作新型冠状病毒实时疫情图
Jan 28 Python
python GUI库图形界面开发之PyQt5时间控件QTimer详细使用方法与实例
Feb 26 Python
Python实现归一化算法详情
Mar 18 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/06/14 PHP
一个php Mysql类 可以参考学习熟悉下
2009/06/21 PHP
php使用socket post数据到其它web服务器的方法
2015/06/02 PHP
PHP使用curl模拟post上传及接收文件的方法
2016/03/04 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
2017/08/28 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
2018/02/07 PHP
JavaScript 组件之旅(四):测试 JavaScript 组件
2009/10/28 Javascript
js实现头像图片切割缩放及无刷新上传图片的方法
2015/07/17 Javascript
Javascript实现获取及设置光标位置的方法
2015/07/21 Javascript
jQuery获取父元素及父节点的方法小结
2016/04/14 Javascript
D3.js实现柱状图的方法详解
2016/09/21 Javascript
JSON对象 详解及实例代码
2016/10/18 Javascript
ES6中的箭头函数实例详解
2017/04/06 Javascript
p5.js入门教程之鼠标交互的示例
2018/03/16 Javascript
详解解决Vue相同路由参数不同不会刷新的问题
2018/10/12 Javascript
在element-ui的select下拉框加上滚动加载
2019/04/18 Javascript
vue.js循环radio的实例
2019/11/07 Javascript
详解Vue3 Composition API中的提取和重用逻辑
2020/04/29 Javascript
vue使用map代替Aarry数组循环遍历的方法
2020/04/30 Javascript
Javascript原型链及instanceof原理详解
2020/05/25 Javascript
vue 动态生成拓扑图的示例
2021/01/03 Vue.js
JavaScript实现点击切换功能
2021/01/27 Javascript
[01:03:50]DOTA2-DPC中国联赛 正赛 CDEC vs DLG BO3 第二场 2月7日
2021/03/11 DOTA
Python实现替换文件中指定内容的方法
2018/03/19 Python
Python基于lxml模块解析html获取页面内所有叶子节点xpath路径功能示例
2018/05/16 Python
Python正则表达式学习小例子
2020/03/03 Python
Python virtualenv虚拟环境实现过程解析
2020/04/18 Python
Python关于拓扑排序知识点讲解
2021/01/04 Python
如何将一个描述日期或日期/时间的字符串转换为一个Date对象
2015/10/13 面试题
小学生读书活动总结
2014/06/30 职场文书
2015年度环卫处工作总结
2015/07/24 职场文书
教导处教学工作总结
2015/08/12 职场文书
财务人员廉洁自律心得体会
2016/01/13 职场文书
浅析Python中的套接字编程
2021/06/22 Python
springboot layui hutool Excel导入的实现
2022/03/31 Java/Android
解决Vmware虚拟机安装centos8报错“Section %Packages Does Not End With %End. Pane Is Dead”
2022/06/01 Servers