2019独角兽企业重金招聘Python工程师标准>>>

-.-编辑中.我语文是数学老师教的...
后续补充参考代码,链接.

很多网站都使用javascript...网页内容由js动态生成,一些js事件触发的页面内容变化,链接打开.甚至有些网站在没有js的情况下根本不工作,取而代之返回你一条类似"请打开浏览器js"之类的内容.

对javascript的支持有四种解决方案:
1,写代码模拟相关js逻辑.
2,调用一个有界面的浏览器,类似各种广泛用于测试的,selenium这类.
3,使用一个无界面的浏览器,各种基于webkit的,casperjs,phantomjs等等.
4,结合一个js执行引擎,自己实现一个轻量级的浏览器.难度很大.

对于简单的有限爬取任务,若可以通过代码模拟js逻辑,首选这种方案,例如,在duckduckgo搜索引擎中,翻页这个动作是靠js触发的.模拟似乎还是很难,然后我注意到他页面的第二个form,似乎submit后就可以翻页,试了一下果然如此.
在写代码模拟相关js逻辑时,首先试下关闭浏览器的js,看下是否能获取到需要的东西.有些页面提供了没有js的兼容.不行再开chrome的控制台或 firebug观察js逻辑,可能是ajax这类收发包.用urllib2(推荐requests库)模拟即可,也可能是修改dom之类,用lxml这类 对应修改即可.说来就是js执行了什么,就用python代码对应模拟执行.

也可选择使用selenium这类,缺点是效率很低,你应当先测试一下selenium启动一个浏览器实例所需时间你是否可接受.这个时间一般在秒级别.再考虑到浏览器打开页面渲染,就更慢了.在效率可接受的前提下,这个方案也不错.
这个方案的另一个问题是在没有桌面环境的服务器上,selenium目测无法运行.

对规模不小,模拟js不可行,selenium效率太低,或需要在无桌面环境上执行的情况.有无界面浏览器,几个无界面浏览器大体情况如下:
1,casperjs,phantomjs:非py,可以通过命令行调用,功能基本满足,推荐先看下这两个是否满足.比较成熟.phantomjs还有一个非官方的webdriver协议实现,由此可通过selenium调phantomjs实现无界面.
2,ghost,spynner等:py定制的webkit,个人觉得spynner代码乱,ghost代码质量不错.但有bug.我看过几个这类库后自己改了一个.
这种方案的详细情况见下面.

最后还有一种选择,在js执行引擎的基础上,自己实现一个轻量级的支持js的无界面浏览器.除非你有非常非常非常多需要爬取的内容,效率十分十分十分重 要.若你有这个想法,可以看下pyv8,在v8的示例代码中有一个基于v8实现的简易浏览器模型.是的,只是个模型,并不完全可用,你要自己填充里面的一 些方法.实现这些你需要在js引擎(v8),http库(urllib2)之上实现这些功能,1,当网页打开时获取其包含的js代码,2,构建一个浏览器 模型,包括各种事件与dom树.3,执行js.除此之外可能还有其他一些细节.难度较大.
网上可以找到一淘所用购物比价爬虫的一篇相关ppt.该爬虫也仅使用的第三种方案.可以看下这篇ppt.该爬虫大概是用的webkit,scrapy,另外把scrapy的调度队列改为基于redis的,实现分布式.

如何实现:

回头谈点背景知识,scrapy使用了twisted.一个异步网络框架.因此要留意潜在的阻塞情况.但注意到settings中有个参数是设置 ItemPipeline的并行度.由此推测pipeline不会阻塞,pipeline可能是在线程池中执行的(未验证).Pipeline一般用于将 抓取到的信息保存(写数据库,写文件),因此这里你就不用担心耗时操作会阻塞整个框架了,也就不用在Pipeline中将这个写操作实现为异步.
除此之外框架的其他部分.都是异步的,简单说来就是,爬虫生成的请求交由调度器去下载,然后爬虫继续执行.调度器完成下载后会将响应交由爬虫解析.

网上找到的参考例子,部分将js支持写到了DownloaderMiddleware中,scrapy官网的code snippet也是这样 .若这样实现,就阻塞了整个框架,爬虫的工作模式变成了,下载-解析-下载-解析,而不在是并行的下载.在对效率要求不高的小规模爬取中问题不大.
更好的做法是将js支持写到scrapy的downloader里.网上有一个这样的实现(使用selenium+phantomjs).不过仅支持get请求.

在适配一个webkit给scrapy的downloader时,有各种细节需要处理.
待续......

转载于:https://my.oschina.net/airship/blog/526536

使用scrapy的定制爬虫-第三章-爬虫的javascript支持相关推荐

  1. Kali Linux Web 渗透测试秘籍 第三章 爬虫和蜘蛛

    第三章 爬虫和蜘蛛 作者:Gilberto Najera-Gutierrez 译者:飞龙 协议:CC BY-NC-SA 4.0 简介 渗透测试可以通过多种途径完成,例如黑盒.灰盒和白盒.黑盒测试在测试 ...

  2. Python网络爬虫(三) 爬虫进阶

    ###目录: Python网络爬虫(一)- 入门基础 Python网络爬虫(二)- urllib爬虫案例 Python网络爬虫(三)- 爬虫进阶 Python网络爬虫(四)- XPath Python ...

  3. 精通python网络爬虫-精通python网络爬虫

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 作者:韦玮 转载请注明出处 随着大数据时代的到来,人们对数据资源的需求越来越多, ...

  4. Python爬虫学习系列教程-----------爬虫系列 你值的收藏

    静觅 » Python爬虫学习系列教程:http://cuiqingcai.com/1052.html 大家好哈,我呢最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多.学习过程中我把 ...

  5. Python精确指南——第三章 Selenium和爬虫

    3       Selenium 3.1     介绍 网络爬虫在互联网领域有着广泛的应用. Selenium是一个页面自动化控制框架.能够模拟实际操作,自动化获取网站提供的页面资源信息. Selen ...

  6. 路飞学城—Python爬虫实战密训班 第三章

    路飞学城-Python爬虫实战密训班 第三章 一.scrapy-redis插件实现简单分布式爬虫 scrapy-redis插件用于将scrapy和redis结合实现简单分布式爬虫:- 定义调度器- 定 ...

  7. Python爬虫学习第三章-4.3-使用xpath解析爬取全国城市名称

    Python爬虫学习第三章-4.3-使用xpath解析爬取全国城市名称   这一节主要是使用xpath解析爬取全国城市名称 这里使用的网址是:空气质量历史数据查询   这一个案例体现的点主要是xpat ...

  8. 第三章:数据解析---聚焦爬虫

    文章目录 第三章:数据解析---聚焦爬虫 注:本页示例所用的test.html文档 一.编码流程 二.数据解析分类 三.数据解析原理概述 四.bs4要点 1.bs4数据解析原理: 2.相关属性: 五. ...

  9. 黄聪:Scrapy 轻松定制网络爬虫

    黄聪:Scrapy 轻松定制网络爬虫 网络爬虫(Web Crawler, Spider)就是一个在网络上乱爬的机器人.当然它通常并不是一个实体的机器人,因为网络本身也是虚拟的东西,所以这个" ...

  10. python爬虫实战之旅( 第三章:数据解析(xpath法))

    上接:第三章:数据解析(bs4法) 下接:第四章:验证码识别 1.xpath解析简介 最常用且最便捷高效的一种解析方式.通用性很好 xpath解析原理 实例化一个etree的对象,且需要将被解析的页面 ...

最新文章

  1. ArcEngine创建字段集
  2. ​KDD 2020 开源论文 | 图神经网络多变量时序预测
  3. java 解析ppt动画_姜子牙口碑崩盘?我们为它做了这份炸裂的PPT!(领取源文件)...
  4. 039_MySQL_多表查询
  5. Java13的API_JAVA基础--JAVA API常见对象(其他API)13
  6. IT公司老板落水,各部门员工怎么救??
  7. Kylin, Mondrian, Saiku系统的整合
  8. 云计算三重奏:SAAS、PAAS和IAAS
  9. pdf如何解除加密?
  10. QT使用VLD检测内存泄漏
  11. Spring Cloud学习系列第三篇【服务容错保护】
  12. 翻译Programming WCF Services第二版
  13. owncloud虚拟机扩容及apt修复
  14. FD-GAN: Pose-guided Feature Distilling GAN for Robust Person Re-identification
  15. 记一次给笔记本安装固态硬盘
  16. 网络故障排查流程及工具使用手册
  17. 盘点 | 2022值得学习的编程语言 TOP 7
  18. u盘装linux镜像是dvd吗,使用U盘刻录镜像及解决在安装过程中找不到光盘的问题...
  19. Mac (M1) 官网安装 Tomcat,XAMPP,MySQL
  20. 2021年江苏高考生物成绩查询,2021年江苏省高考生物考试说明.docx

热门文章

  1. Stanford Parser demo错误:Unsupported major.minor version 52.0 error
  2. 机器学习分类算法_Python机器学习之K近邻分类算法(四)
  3. 蓝桥杯2017年第八届C/C++省赛C组第七题-Excel地址
  4. Android ViewPager 滑动监听事件
  5. 《Flutter 从0到1构建大前端应用》读后感—第9章【插件与混合工程】
  6. Android ViewPager + PagerAdapter 实现轮播图
  7. 一个网卡设备配置两个不同网段的IP地址
  8. 【浅说】堆(heap)和栈(stack)区别
  9. Does Your Wooden Surface Really Need Sealing?
  10. weblogic系列漏洞整理 -- 1. weblogic安装