• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

一、 前言

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!

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

注解:

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 上滑(动态)加载

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap