Scrapy入门(四)

Splash渲染引擎

Splash是Scrapy官方推荐的Javascript渲染引擎,使用Webkit开发的轻量级无页面浏览器,提供基于Http接口的Javascript渲染服务,支持

  • 为用户返回经过渲染的HTML页面
  • 并发渲染多个页面
  • 关闭图片加载,加速渲染
  • 在页面中执行用户自定义的Javascript代码
  • 执行用户自定义的渲染脚本(lua)
    给出Splash文档地址https://splash.readthedocs.io/en/latest/install.html
Windows下Splash安装

首先需要下载docker,docker-desktop只支持win10专业版,因此对于其他的win7,8,10用户需要下载docker toolbox下载链接,点击dockerdownload下载后直接安装,其中install这一步需要全部安装。
安装完后从桌面打开Docker Quickstart Terminal。第一次运行时会在VirtualBox中安装boot2Docker-vm虚拟机,安装成功以后自动启动(这里不需要用户每次到VirtualBox中手动启动boot2Docker-vm虚拟机,执行Docker客户端后虚拟机自动启动)。
安装完Docker后需要安装Splash,在Docker里输入shell命令docker pull scrapinghub/splash自动安装splash,之后输入docker run -p 8050:8050 -p 8051:8051 scrapinghub/splash后在本机的8050和8051上开启Splash服务。

在Scrapy中使用Splash爬取js信息

具体的splash用法自行去看文档,下面以一个实战来演示一下。爬取http://quotes.toscrape.com/js/中所有的名人名言
启动docker,打开splash
查看IPdocker-machine ip,这就是下面将要使用的splash-Ip
dockerip
首先安装scrapy-splash库,使用Anaconda prompt安装pip install scrapy-splash,再创建项目scrapy.startproject splash_examples,接着进入文件夹后创建模板scrapy genspider quotes quotes.toscrape.com
完成spider

# -*- coding: utf-8 -*-
import scrapy
from scrapy_splash import SplashRequest
class QuotesSpider(scrapy.Spider):
    name = 'quotes'
    allowed_domains = ['quotes.toscrape.com']
    start_urls = ['http://quotes.toscrape.com/js/']

    def start_requests(self):
        for url in self.start_urls:
            yield SplashRequest(url, args = {'image': 0, 'timeout': 3})
        pass
    def parse(self, response):
        for sel in response.css('div.quote'):
            quote = sel.css('span.text::text').extract_first()
            author = sel.css('small.author::text').extract_first()
            yield {'quote' : quote, 'author' : author}
        href = response.css('li.next>a::attr(href)').extract_first()
        if href:
            url = response.urljoin(href)
            yield SplashRequest(url, args={'image': 0, 'timeout': 3})

        pass

再去setting中进行配置

BOT_NAME = 'splash_examples'

SPIDER_MODULES = ['splash_examples.spiders']
NEWSPIDER_MODULE = 'splash_examples.spiders'
SPLASH_URL = 'http://***.***.***.***:8050/'		# 上文中的Ip
FEED_EXPORT_ENCODING = 'GB2312'            #导出文件的编码,如果不写会乱码
# 用来支持cache_args(可选)
SPIDER_MIDDLEWARES = {
    'scrapy_splash.SplashDeduplicateArgsMiddleware' : 100,
}
# 开启Splash的两个下载中间件并调整HttpCompressionMiddleware的次序
DOWNLOADER_MIDDLEWARES = {
    'scrapy_splash.SplashCookiesMiddleware': 733,
    'scrapy_splash.SplashMiddleware' : 725,
    'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
   # 'splash_examples.middlewares.SplashExamplesDownloaderMiddleware': 543,
}
# 设置去重过滤器
DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'

再使用命令提示符进行爬取,完成!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值