目前,为了加速页面的加载速度,页面的很多部分都是用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 SplashRequestclass 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生成的动态页面相关推荐

  1. python爬虫利用Scrapy框架爬取汽车之家奔驰图片--实战

    先看一下利用scrapy框架爬取汽车之家奔驰A级的效果图 1)进入cmd命令模式下,进入想要存取爬虫代码的文件,我这里是进入e盘下的python_spider文件夹内 C:\Users\15538&g ...

  2. 利用Scrapy框架爬取LOL皮肤站高清壁纸

    利用Scrapy框架爬取LOL皮肤站高清壁纸  Lan   2020-03-06 21:22   81 人阅读  0 条评论 成品打包:点击进入 代码: 爬虫文件 # -*- coding: utf- ...

  3. 利用Scrapy框架爬取前途无忧招聘信息

    利用Scrapy框架爬取前途无忧招聘信息 关于安装和命令使用可参考:https://docs.scrapy.org/en/1.7/intro/install.html 先创建项目和爬虫文件 分析网站 ...

  4. 利用Scrapy框架爬取汽车之家图片(详细)

    爬取结果 爬取步骤 创建爬虫文件 进入cmd命令模式下,进入想要存取爬虫代码的文件,我这里是进入e盘下的E:\pystudy\scraping文件夹内 C:\Users\wei>E:E:\> ...

  5. python笔记之利用scrapy框架爬取糗事百科首页段子

    环境准备: scrapy框架(可以安装anaconda一个python的发行版本,有很多库) cmd命令窗口 教程: 创建爬虫项目 scrapy startproject qq #创建了一个爬虫项目q ...

  6. 利用Scrapy框架爬取落网上的音乐文件

    今天爬取的是本人特别喜欢的一个音乐网站,www.luoo.net, 首先是设置item中需要保存的字段. items.py 字段名称包括期刊号,期刊名,期刊创建时间,单期期刊下的音乐名,作者名,音乐文 ...

  7. 利用scrapy框架爬取动态加载的数据

    在爬取有些网站的是后,数据不一定全部是可视化界面的,当我们拖动滚动条时才会加载其他的数据,如果我们也想爬取这部分数据,就需要使用selenium模块,在scrapy里可以结合该模块修改返回对象 一.编 ...

  8. 利用scrapy简单爬取新片场前20页视频数据,并存入mysql数据库

    1.创建Scrapy项目 scrapy startproject XPC 2.进入项目目录,使用命令genspider创建Spider(注意后面允许爬取的域要增加) scrapy genspider ...

  9. scrapy配合selenium爬取需要反复操作同一个动态页面的方法,解决点击“下一页”但是URL相同的网站

    首先这种网站一定要设置爬取的速率,目标网站用这种方式写入网页估计是被爬虫搞怕了,大概率有更简单的反爬方法,因此爬取速率要注意.博主要爬的网站是一个电影网站:艺恩,点击下一页可以看到其实执行了一个js拿 ...

最新文章

  1. SpringBoot介绍
  2. python读取文件中的数据为二维数组变量_Numpy 多维数据数组的实现
  3. Oracle递归操作
  4. 8个适合用来练手的SpringBoot开源项目
  5. android自动化测试之robotium初探(三),Android自动化测试之Robotium--基础操作.pdf
  6. linux内核实现ipsec,IP XFRM配置示例:利用linux kernel自带的IPSec实现,手动配置IPSec...
  7. mac 更换brew镜像源
  8. Going Deeper in Spiking Neural Networks: VGG and Residual Architectures
  9. SDL附着window窗口的方法
  10. voices——最后的决赛
  11. Python帮助文档
  12. 在Ubuntu 将PHP5升级到PHP7.0 PHP7.1
  13. python安装不了whl文件_python怎样安装whl文件
  14. matlab两个力的合成与分解,[转帖]小波图像分解与合成(例子) - Matlab讨论区 - 振动论坛 动力学,噪声 -......
  15. 强化学习之Grid World的Monte Carlo算法解析【MiniWorld】SYSU_2023SpringRL
  16. 【单片机仿真项目】模拟开关灯(proteus原理图+keil代码)
  17. CDA数据分析师视频教程全套零基础入门excel考试教学课程2022
  18. 读取word、pdf某些位置的值
  19. 牛顿迭代法(C++)
  20. vb怎么自动连接服务器,vb如何连接云服务器数据库(云服务器和云数据库)

热门文章

  1. 基于OpenWrt的PPTP插件开启防火墙转发
  2. 蓝牙资讯|2022 年 Q4 全球 TWS 耳机出货量 7900 万部
  3. 如何把电脑设置默认使用d盘
  4. MySQL中,对结果或条件进行字符串拼接
  5. 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
  6. IT行业的最新走向!
  7. Short 类型直接和数值1做对比
  8. log4j2远程漏洞事件
  9. Red Hat Enterprise Linux 7.2
  10. python培训感想