前因

现在的网页越来越动态和漂亮,大量地用到了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. r语言导出html改不了名,请问如何进行数据框列的重命名?
  2. 这么多年,终于有人讲清楚 Transformer 了!
  3. web前端入门学习 css(7)css高级技巧 (精灵图、字体图标、css三角、鼠标样式、表单轮廓线、文本框拖拽、垂直对齐、图底空白缝隙、margin负值、溢出文字省略号、文字环绕、css初始化)
  4. OpenGL ES之Swift使用GLSL语言渲染图片的显示
  5. 远程链接错误:这可能是由于credssp加密oracle修正
  6. 第 1 节:前端面试指南 — 简历篇
  7. C\C++不经意间留下的知识空白------const使用
  8. Android系统(20)---开发android项目的常用jar包
  9. python中的zip、map、reduce 、lambda、filter函数的使用
  10. linux下的malloc申请的是虚拟还是物理的,关于malloc申请内存
  11. linux删除具有指定内容的文件,Linux bash删除文件中含“指定内容”的行功能示例...
  12. 短视频抢了直播饭碗,花椒、映客们逆袭抖音、快手无门
  13. springmvc的一些优化设置
  14. 百度AI之身份证识别
  15. win10安装wget,从此可以更快的下载文件 and windows10 下 zip命令行参数详解
  16. WorldPress出现Briefly unavailable for scheduled maintenance. Check back in a minute.的解决方法
  17. 图像处理之3d算法----2d转3d算法介绍
  18. 计算机底层:进程与线程。
  19. crm系统技术(crm系统需要用到的技术)
  20. 【谷歌地图--DirectionsSDK集成】

热门文章

  1. sv package
  2. 5.20,福利一波,用文字拼一个自己最爱的人
  3. 论微服务架构设计与应用
  4. linux 操作系统root账号被锁定的两种解决方法
  5. abupy文件结构功能
  6. C# 开发winform程序 手机短信群发系统
  7. 中高级Java面试题解析,剑指BATJ,提前祝大家程序员节快乐
  8. 未接响铃1秒是什么意思_18650锂电池3C到底是什么意思?看了秒懂
  9. postman传数组
  10. siri语音输入效果_如何输入Siri的语音命令