博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
zg手册 之 scrapy 开发(4)-- javascript 动态页面的抓取
阅读量:5756 次
发布时间:2019-06-18

本文共 966 字,大约阅读时间需要 3 分钟。

  hot3.png

javascript 动态页面

目前许多网站大量运用js脚本进行一些页面的处理,这些页面的抓取对爬虫是个挑战。 这类页面的抓取,我用到了下面的方法

  1. 分析页面(firebug/chrome调试工具 等),找到ajax获取的数据源,看是否可以直接发请求获取

  2. 调用浏览器引擎(webkit)获取最后 js 执行过完成的页面

  3. 调用无界面依赖的浏览器引擎(headless browser) casperjs,phantomjs 获取最后的页面

使用 webkit 抓取

安装需要的软件

# Xvfb 模拟 Xwindowssudo apt-get install xvfb# 安装 python webkit包

添加增加下面的下载代码(增加的位置我后面说明)

webview = webkit.WebView()webview.connect( 'load-finished', lambda v,f: gtk.main_quit() )webview.load_uri( request.url )gtk.main()renderedBody = str(webview.execute_script('document.documentElement.innerHTML'))# renderedBody 是执行后页面的内容

注意的上面的代码我没有说明写在哪里,网上很多例子都是说写 下载中间件(DownloaderMiddleware)里,这是有些问题的

  1. scrapy 是基于twisted的异步网络框架。如果下载中间件中长时间阻塞,就会阻塞整个异步处理流程

  2. scrapy 本身的下载 delay 功能,是在中间件下面一层生效(中间件和下载器之间),也就是说如果在下载中间件这里中断处理流程,下载时间间隔功能将失去作用。

  3. 还有一个问题就是 上面的方案需要启动模拟的 x-server (xvfb)

目前的方案

  1. casperjs,phantomjs 无界面浏览器(headless browser)

  2. 写一个 scrapy 的 下载handler,这是scrapy支持的插件,并且不影响其他框架功能的运行,下载器的开发我会在下一篇讲一下

原文链接:

转载于:https://my.oschina.net/hopez/blog/215304

你可能感兴趣的文章
类加载机制
查看>>
OC面向对象-继承
查看>>
生活不只是生存:教你学会生活的30种方式【转载】
查看>>
WPF 设置回车触发按钮时间
查看>>
往届软工实践作品评述
查看>>
[水]用vb写了个PCB
查看>>
linux 通过两个网卡,连接不同的不同的网段
查看>>
AizuOJ ALDS1_7_A Rooted Trees(有根树的表达)
查看>>
POJ 1862 Stripies (简单贪心)
查看>>
go 数组与切片
查看>>
第一篇
查看>>
在VS2013、VS2015下如何配置DirectX SDK的开发环境
查看>>
Windows7下IIS+php配置教程 http://www.jb51.net/article/113812.htm
查看>>
Razor视图引擎的基本概念与法语
查看>>
电解电容
查看>>
SQL for xml path 应用 很详细
查看>>
Azure云 windows平台 搭建ftp服务器注意事项
查看>>
比技术还重要的事
查看>>
Single Number II
查看>>
Palindrome Partitioning II
查看>>