Scrapy框架(1):splash+Lua 脚本实现滚轮动态加载

一、 前言

1.1 背景

学习爬取 https://ask.csdn.net 的时候发现,CSDN 数据加载通过鼠标下滑实现(动态加载

1.2 技术对比

对于动态js页面的爬取有以下几种爬取的方式:

  1. 通过selenium + phantomjs 实现

    1. phantomjs是一个无头浏览器,selenium是一个自动化测试的框架,通过无头浏览器请求页面,等待js加载,再通过自动化测试selenium获取数据。因为无头浏览器非常消耗资源,所在性能方面有所欠缺。
  2. 采用Scrapy-splash框架:

    1. Splash作为js渲染服务,是基于Twisted和QT开发的轻量浏览器引擎,并且提供直接的http api。快速、轻量的特点使其容易进行分布式开发。

    2. splashscrapy爬虫框架融合,两种互相兼容彼此的特点,抓取效率较好

二、Splash环境搭建

2.1 docker安装(windows 10)

  1. windows 10专业版或其他操作系统,安装 docker 比较简单
    专业版安装教程

  2. 在windows 10家庭版安装 docker 需要借助 toolbox(最新)工具安装
    家庭版安装教程

2.2 splash 安装

docker pull scrapinghub/splash

2.3 启动 Splash 服务

docker run -p 8050:8050 scrapinghub/splash

在这里插入图片描述
2.31 打开浏览器,输入 http://localhost:8050,进入下图极为成功。
在这里插入图片描述
2.3.2 在黑色代码块区域上方输入 https://ask.csdn.net/ ,点击 Render me!
图 - 4
2.3.3 点击上图,Script按钮可看到原始脚本

function main(splash, args)
  assert(splash:go(args.url))
  assert(splash:wait(0.5))
  return {
    html = splash:html(),
    png = splash:png(),
    har = splash:har(),
  }
end

注解:
图 - 5
2.3.4 将上图中的 HTML代码复制到 Sublime Text, Ctrl+f调出查询框。输入questions_detail_con(csdn 问答模块的数据div类名),左下角显示20条数据
在这里插入图片描述

直接在浏览器中查询 questions_detail_con同样的效果

2.3.5 点击Script更该脚本,点击Render(这里为了跟好的显示效果返回html代码,自己根据情况返回相应格式)

function main(splash, args)
  splash:go(args.url)
  local scroll_to = splash:jsfunc("window.scrollTo")
  scroll_to(0, 2800)
  splash:set_viewport_full()
  splash:wait(5)
  return {
  	html=splash:html()
  }
end

2.3.6 重复 2.3.4 步骤,得出返回30条数据(csdn 初始为20条,一次下滑增加10条数据)
在这里插入图片描述

2.4 安装python的 scrapy-splash 包

pip install scrapy-splash

三、 Scrapy 爬虫项目教程

经过测试,发现此方法参考资源少,而且采集数据的效果几乎没有用(就不贴代码误人子弟了)。
时间紧迫,决定开辟第二种方法:解析 Ajax + js 动态请求。

3.1参考教程:

Scrapy框架学习(七)----Scrapy与scrapy-splash框架结合,快速加载js页面
Scrapy学习篇(十三)之scrapy-splash
使用scrapy+splash+Lua脚本实现滚轮动态加载爬取CSDN

四、 总结

  1. scrapy-splash目前只能模拟滑动一次,即加载30条数据。(希望大神指导)
  2. 分析网页源码中Ajax的请求,发现了第二中方法。参考教程Scrapy框架(2): CSDN 上滑(动态)加载
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值