利用scrapy-splash爬取JS生成的动态页面
2017-02-16 00:27
381 查看
目前,为了加速页面的加载速度,页面的很多部分都是用JS生成的,而对于用scrapy爬虫来说就是一个很大的问题,因为scrapy没有JS engine,所以爬取的都是静态页面,对于JS生成的动态页面都无法获得。
解决方案:
利用第三方中间件来提供JS渲染服务: scrapy-splash 等。
利用webkit或者基于webkit库
Splash是一个Javascript渲染服务。它是一个实现了HTTP API的轻量级浏览器,Splash是用Python实现的,同时使用Twisted和QT。Twisted(QT)用来让服务具有异步处理能力,以发挥webkit的并发能力。
下面就来讲一下如何使用scrapy-splash:
1、利用pip安装scrapy-splash库:
$ pip install scrapy-splash
2、scrapy-splash使用的是Splash HTTP API, 所以需要一个splash instance,一般采用docker运行splash,所以需要安装docker。
3、安装docker, 安装好后运行docker。
4、拉取镜像(pull the image):
$ docker pull scrapinghub/splash
5、用docker运行scrapinghub/splash:
$ docker run -p 8050:8050 scrapinghub/splash
6、配置splash服务(以下操作全部在settings.py):
1)添加splash服务器地址:
SPLASH_URL = 'http://localhost:8050'
2)将splash middleware添加到DOWNLOADER_MIDDLEWARE中:
DOWNLOADER_MIDDLEWARES = {
'scrapy_splash.SplashCookiesMiddleware': 723,
'scrapy_splash.SplashMiddleware': 725,
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
}
3)Enable SplashDeduplicateArgsMiddleware:
SPIDER_MIDDLEWARES = {
'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
}
4)Set a custom DUPEFILTER_CLASS:
DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'
5)a custom cache storage backend:
HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'
7、例子
获取HTML内容:
import scrapy
from scrapy_splash import SplashRequest
class MySpider(scrapy.Spider):
start_urls = ["http://example.com", "http://example.com/foo"]
def start_requests(self):
for url in self.start_urls:
yield SplashRequest(url, self.parse, args={'wait': 0.5})
def parse(self, response):
# response.body is a result of render.html call; it
# contains HTML processed by a browser.
# ...
转载自:http://www.cnblogs.com/zhonghuasong/p/5976003.html
解决方案:
利用第三方中间件来提供JS渲染服务: scrapy-splash 等。
利用webkit或者基于webkit库
Splash是一个Javascript渲染服务。它是一个实现了HTTP API的轻量级浏览器,Splash是用Python实现的,同时使用Twisted和QT。Twisted(QT)用来让服务具有异步处理能力,以发挥webkit的并发能力。
下面就来讲一下如何使用scrapy-splash:
1、利用pip安装scrapy-splash库:
$ pip install scrapy-splash
2、scrapy-splash使用的是Splash HTTP API, 所以需要一个splash instance,一般采用docker运行splash,所以需要安装docker。
3、安装docker, 安装好后运行docker。
4、拉取镜像(pull the image):
$ docker pull scrapinghub/splash
5、用docker运行scrapinghub/splash:
$ docker run -p 8050:8050 scrapinghub/splash
6、配置splash服务(以下操作全部在settings.py):
1)添加splash服务器地址:
SPLASH_URL = 'http://localhost:8050'
2)将splash middleware添加到DOWNLOADER_MIDDLEWARE中:
DOWNLOADER_MIDDLEWARES = {
'scrapy_splash.SplashCookiesMiddleware': 723,
'scrapy_splash.SplashMiddleware': 725,
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
}
3)Enable SplashDeduplicateArgsMiddleware:
SPIDER_MIDDLEWARES = {
'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
}
4)Set a custom DUPEFILTER_CLASS:
DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'
5)a custom cache storage backend:
HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'
7、例子
获取HTML内容:
import scrapy
from scrapy_splash import SplashRequest
class MySpider(scrapy.Spider):
start_urls = ["http://example.com", "http://example.com/foo"]
def start_requests(self):
for url in self.start_urls:
yield SplashRequest(url, self.parse, args={'wait': 0.5})
def parse(self, response):
# response.body is a result of render.html call; it
# contains HTML processed by a browser.
# ...
转载自:http://www.cnblogs.com/zhonghuasong/p/5976003.html
相关文章推荐
- 利用scrapy-splash爬取JS生成的动态页面
- scrapy-splash爬取JS生成的动态页面
- JS-利用ajax获取json数据,并传入页面生成动态tab
- Scrapy利用Splash抓取动态页面
- 利用字节流将生成的图片输出到js页面,实现动态生成图片
- Scrapy爬虫中使用Splash抓取动态JS页面
- 利用servlet动态生成wap页面
- 利用ASP.NET技术动态生成HTML页面
- 利用UrlRewrite,asp.net动态生成htm页面(补充说明)
- 利用ASP.NET技术动态生成HTML页面
- 「提高」如何利用ASP.NET技术动态生成HTML页面
- 利用UrlRewrite,asp.net动态生成htm页面
- 利用ASP.NET技术动态生成HTML页面
- 利用UrlRewrite,asp.net动态生成htm页面
- 利用UrlRewrite,asp.net动态生成htm页面
- 如何利用ASP.NET技术动态生成HTML页面
- 利用XML动态生成ASPX页面
- 利用UrlRewrite,asp.net动态生成htm页面
- 利用ASP.NET技术动态生成HTML页面
- 利用UrlRewrite,asp.net动态生成htm页面