使用scrapy+splash+Lua滚动爬取CSDN
Posted Python爬虫scrapy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用scrapy+splash+Lua滚动爬取CSDN相关的知识,希望对你有一定的参考价值。
这个主要是为了使用splash,做的
CSDN爬的数据频繁以后好像会自动504,开始正文:
安装scrapy,安装splash需要安装docker,详细的安装步骤在我的csdn博客
https://blog.csdn.net/zhao_5352269/article/details/82850496
打开csdn,会发现csdn的文章是随着你鼠标滑动向下加载的
如果就只用scrapy框架爬的话,就是只有当前显示的内容
而我们需要滑动以后的内容,就需要splash了,当然是用selnium也是可以的
安装完splash以后,启动服务,在页面访问
可以将所有的都截取加上,详细见官方文档https://splash.readthedocs.io
splash:set_viewport_full - 更改视口大小(在 splash:png或 splash:jpeg之前调用它 )以获取整个页面的屏幕截图;
将图片保存,这样就实现在splash中滑动的效果
接下来就是在scrapy框架中,使用splash了。
将刚才的脚本复制到爬虫中(微信这个有问题,不能全部显示,一会发源码)
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传递参数
yield SplashRequest(nav_url, endpoint='execute', args={'lua_source': script, 'url': nav_url}
在对setting进行设置(必须)
DOWNLOADER_MIDDLEWARES = {
'scrapy_splash.SplashCookiesMiddleware':723,
'scrapy_splash.SplashMiddleware':725,
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,#不配置查不到信息
# 'Technology.middlewares.TechnologyDownloaderMiddleware': 543,
}
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,获取源码
以上是关于使用scrapy+splash+Lua滚动爬取CSDN的主要内容,如果未能解决你的问题,请参考以下文章