什么是scrapy_splash?
-
scrapy-splash加载js数据是基于Splash来实现的。 Splash是一个Javascript渲染服务。
-
它是一个实现了HTTPAPI的轻量级浏览器,Splash是用Python和Lua语言实现的,基于Twisted和QT等模块构建。
-
使用scrapy-splash最终拿到的response相当于是在浏览器全部渲染完成以后的网页源代码。
scrapy_splash的作用
- scrapy-splash能够模拟浏览器加载js,并返回js运行后的数据
在scrapy中使用splash
1,创建项目创建爬虫
scrapy startproject 项目名
cd 项目名
scrapy genspider 爬虫名字 域
2,完善settins.py文件
# 渲染服务的url
SPLASH_URL = 'http://127.0.0.1:8050'
# 下载器中间件
DOWNLOADER_MIDDLEWARES = {
'scrapy_splash.SplashCookiesMiddleware': 723,
'scrapy_splash.SplashMiddleware': 725,
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
}
# 去重过滤器
DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'
# 使用Splash的Http缓存
HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'
# Obey robots.txt rules
ROBOTSTXT_OBEY = False
3,使用splash 在爬虫文件重写start_requests方法
def start_requests(self):
yield SplashRequest(self.start_urls[0],
callback=self.parse_splash,
args={'wait': 10}, # 最大超时时间,单位:秒
endpoint='render.html') # 使用splash服务的固定参数
4,运行爬虫,查看被渲染的响应内容
scrapy crawl 爬虫名