前因

现在的网页越来越动态和漂亮,大量地用到了Javascript,包括但是不限于Ajax,这样一来直接查看网页源代码的话的,获取到的并不是真正的渲染完成后的页面。这对采集来说,是一个很大的挑战。

在火车头当中,对于Ajax获取的数据的话,可以手动分析页面提取的Ajax的处理url,然后来提取。但是对于复杂的session验证(特别是.NET的网站来说)处理比较困难。

另外一方面,对于javascript生成的页面,火车头也没法直接提取。

思路

首先明确的是必须获取Javascript渲染结束后的结果。这一点是明确的,具体就是方法就因人而异。

而自己解决Javascript渲染无异于痴人说梦,所以必须借助现有的浏览器核心,比如Gecko、WebKit、IE。如果用Java开发的话可以Jrec这个库,它封装了Gecko。如果其他的语言,且在Windows平台上的话,最简单的就是用—— COM,用Internet Explorer 提供的com组件。

解决方案

突破了这层关系,下面的就水到渠成了。

在python下,对IE封装的比较完善而且文档齐全的就是PAMIE(http://sourceforge.net/projects/pamie),它的本意是作为自动化测试工具使用的。

需要注意的是,在页面加载完之后需要留出一定时间来让页面的js代码执行渲染完成后再提取html代码,这个时间需要通过试验确定。

PAMIE 示例

PAMIE是一套为Python写的用于Web自动化测试的工具,采用Win32COM的方式操作IE来实现。

Pamie是个很好的操作IE的模块,用pamie来操作ie浏览器好方便,本来它就是一个IE测试自动化的东西,这样,用pamie来抓取网页,自动提交表单很容易。

PAMIE测试最简单的例子:

from cPAMIE import PAMIE

ie = PAMIE()

ie.navigate("google.com")

ie.textBoxSet('q','python')

ie.buttonClick('btnG')

ie.linkClick('Python Programming Language -- Official Website')

ie.windowChange('Python Programming Language -- Official Website')

ie.windowFind('Python Programming Language -- Official Website')

ie.textBoxSet('q',"Automation")

ie.buttonClick('submit')

直接操作页面上的form元素,访问页面的文本信息,来判断用户登陆是否成功。

需要注意点

前面所述的利用PAMIE来获取渲染后的html内容的方法是可行的,但是缺点是效率非常低。对于最常见的ajax动态内容页面来说,最直接的方法还是构造ajax请求,来获取相应内容。这样效率很高,而且返回数据都是结构化的xml或者json数据,比html更容易处理。

python获取js渲染后的源码_Python使用PAMIE获取JS渲染后的HTML源码 - 米扑博客相关推荐

  1. alexa api php,PHP通过Alexa官方API获取网站Alexa排名 - 米扑博客

    Alexa 接口 Alexa的XML API接口是:http://data.alexa.com/data?cli=10&url=YOUR_DOMAIN_URL 查询结果如下: 如果想获取更多的 ...

  2. java 爬虫js渲染_java_爬虫_获取经过js渲染后的网页源码

    md 弄了一天了--(这个月不会在摸爬虫了,浪费生命) 进入正题: 起初是想写一个爬虫来爬一个网站的视频,但是怎么爬取都爬取不到,分析了下源代码之后,发现源代码中并没有视频的dom 但是在浏览器检查元 ...

  3. 鸿蒙关键技术研究,鸿蒙内核源码分析(静态链接篇) | 完整小项目看透静态链接过程 | 百篇博客分析HarmonyOS源码 | v54.02...

    百篇博客系列篇.本篇为: 下图是一个可执行文件编译,链接的过程. 本篇将通过一个完整的小工程来阐述ELF编译,链接过程,并分析.o和bin文件中各区,符号表之间的关系.从一个崭新的视角去看中间过程,阅 ...

  4. v79.01 鸿蒙内核源码分析(用户态锁篇) | 如何使用快锁Futex(上) | 百篇博客分析OpenHarmony源码

    百篇博客分析|本篇为:(用户态锁篇) | 如何使用快锁Futex(上) 进程通讯相关篇为: v26.08 鸿蒙内核源码分析(自旋锁) | 当立贞节牌坊的好同志 v27.05 鸿蒙内核源码分析(互斥锁) ...

  5. v66.07 鸿蒙内核源码分析(根文件系统) | 谁先挂到/谁就是根总 | 百篇博客分析OpenHarmony源码

    季康子问政于孔子.孔子对曰:"政者,正也.子帅以正,孰敢不正?" <论语>:颜渊篇 百篇博客系列篇.本篇为: v66.xx 鸿蒙内核源码分析(根文件系统) | 谁先挂到 ...

  6. python selenium 获取同一元素的多个属性_python+selenium如何获取元素中并列的属性值?...

    获取标签内容 使用element.attribute()方法获取dom元素的内容,如: dr = driver.find_element_by_id('tooltip') dr.get_attribu ...

  7. 6.2 新浪财经——资产负债表获取(打印js渲染后的网页表格)

    在搜索引擎中搜索"贵州茅台 新浪财经",进入新浪财经中"贵州茅台"的(https://finance.sina.com.cn/realstock/company ...

  8. python爬虫源码_Python—爬虫:王者荣耀全套皮肤【附源码】

    怎么获取全套皮肤?用钱买,或者用爬虫爬取下来~虽然后者不能穿.这个案例稍微复杂一点,但是一个非常值得学习的项目. 具体实现思路: 分析网页源代码结构 找到合适的入口 穷举访问并解析 爬取所有英雄所有皮 ...

  9. 如何用python编写抢购程序源码_Python实现淘宝秒杀聚划算抢购自动提醒源码

    说明 本实例能够监控聚划算的抢购按钮,在聚划算整点聚的时间到达时发出提醒(音频文件自己定义位置)并自动弹开页面(URL自己定义). 同时还可以通过命令行参数自定义刷新间隔时间(默认0.1s)和监控持续 ...

最新文章

  1. C#拾遗系列(4):索引器
  2. go 查看全局安装了哪些包_GO 文档笔记
  3. NTU课程笔记 MAS714(8) 分治与排序
  4. dockerclient 查看端口占用_docker 端口被占用问题解决
  5. MVDR波束形成MATLAB实现
  6. [技术分享]20171130_Kendo UI _ datePicker日期控件如何只选择年,不选择月,日?
  7. Idea进行远程Debug
  8. java学生签到系统视频教程_手把手教你做一个Java web学生信息、选课、签到考勤、成绩管理系统附带完整源码及视频开发教程...
  9. 如何安装php5.5,源码安装php5.5
  10. Oracle 分页与排序功能的4个查询语句
  11. ERP商品管理业务逻辑封装(三十四)
  12. C#中的深度学习:预处理硬币检测数据集
  13. “编程能力差,90%输在了这点上!”骨灰级工程师:其实你们都是瞎努力!
  14. unexpected error ConnectionError object has no attribute
  15. 【少儿软件的定制】如何吸引少儿的学习兴趣?如何提高少儿学习软件的粘度?
  16. 深蓝学院【视觉SLAM十四讲】汇总
  17. win10如何调整计算机时间同步,win10电脑时间与Internet同步的设置方法
  18. Unity3D中MonoDevelop无法使用
  19. 新cBSS灰度发布Git管理流程
  20. 东塔靶场之文件上传cms--pluck

热门文章

  1. 武汉理工计算机网络,计算机网络实验武汉理工大学
  2. R语言包(package)以及相关命令语句
  3. sdk是什么意思_学好前端的6点建议,企业需要什么样的Web前端人才?
  4. [Watermelon_book] Chapter 3 Linear Model
  5. 重磅!西安交通大学使用脑机接口技术实现了高位截瘫失语患者“说”出“心里话”
  6. html 白色用rgba,javascript – 将RGB转换为RGBA白色
  7. Win7-64 重装 Anaconda3
  8. NMS、soft NMS、softer NMS与IOU-Guided NMS
  9. 后处理方法NMS、Soft-NMS、 Softer-NMS、WBC、DIoUNMS 、NMS替代算法Confluence
  10. 交并比 (IoU), mAP (mean Average Precision), 非极大值抑制 (NMS, Soft NMS, Softer NMS, IoU-Net)