前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用scrapy+splash+Lua滚动爬取CSDN

使用scrapy+splash+Lua滚动爬取CSDN

作者头像
andrew_a
发布2019-07-30 13:00:58
2K1
发布2019-07-30 13:00:58
举报
文章被收录于专栏:Python爬虫与数据分析

这个主要是为了使用splash,做的

CSDN爬的数据频繁以后好像会自动504,开始正文:

安装scrapy,安装splash需要安装docker,详细的安装步骤在我的csdn博客

https://blog.csdn.net/zhao_5352269/article/details/82850496


打开csdn,会发现csdn的文章是随着你鼠标滑动向下加载的

如果就只用scrapy框架爬的话,就是只有当前显示的内容

而我们需要滑动以后的内容,就需要splash了,当然是用selnium也是可以的

安装完splash以后,启动服务,在页面访问

点击Examples,再继续选择Scroll page,就会出现改脚本,点击render me,就会直接运行,返回你所需的东西.默认的url可能会有点慢,直接复制csdn的地址,在运行,

可以将所有的都截取加上,详细见官方文档https://splash.readthedocs.io

  • splash:set_viewport_full - 更改视口大小(在 splash:png或 splash:jpeg之前调用它 )以获取整个页面的屏幕截图;

将图片保存,这样就实现在splash中滑动的效果

接下来就是在scrapy框架中,使用splash了。

将刚才的脚本复制到爬虫中(微信这个有问题,不能全部显示,一会发源码)

代码语言:javascript
复制
script = """
function main(splash, args)
  splash:go(args.url)
  local scroll_to = splash:jsfunc("window.scrollTo")
  scroll_to(0, 1000)
  splash:set_viewport_full()
  splash:wait(10)
  return {html=splash:html()}
end
"""

复制过来没有全部显示

然后再使用SplashRequest中的args传递参数,也可以使用Scrapy.Request使用meta传递参数

代码语言:javascript
复制
yield SplashRequest(nav_url, endpoint='execute', args={'lua_source': script, 'url': nav_url}

在对setting进行设置(必须)

代码语言:javascript
复制
DOWNLOADER_MIDDLEWARES = {
    'scrapy_splash.SplashCookiesMiddleware':723,
    'scrapy_splash.SplashMiddleware':725,
    'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,#不配置查不到信息
   # 'Technology.middlewares.TechnologyDownloaderMiddleware': 543,
}
代码语言:javascript
复制
HTTPCACHE_ENABLED = True
HTTPCACHE_EXPIRATION_SECS = 0
HTTPCACHE_DIR = 'httpcache'
#HTTPCACHE_IGNORE_HTTP_CODES = []
#HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'
SPLASH_URL = "http://192.168.99.100:8050"      #自己安装的docker里的splash位置
DUPEFILTER_CLASS = "scrapy_splash.SplashAwareDupeFilter"
HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'

执行代码

我只拿了标题

这个在pycharm中复制,我重新发源码

关注我后回复splash,获取源码

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-09-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python爬虫scrapy 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档