python网络数据采集-处理重定向问题
来源:互联网 发布:监测游戏帧数软件 编辑:程序博客网 时间:2024/06/11 00:42
第一部分:客户端重定向VS服务器端重定向
客户端重定向是在服务器将页面内容发送到浏览器页面之前,由浏览器执行JavaScript完成的页面跳转,而不是服务器完成的跳转。当使用浏览器访问页面的时候,有时候很难区分这两种跳转。由于客户端重定向执行很快,加载页面是你甚至感觉不到任何延迟,所以会让你觉得这个重定向就是一个服务器端重定向。
但是,在进行网络数据采集的时候,这两种重定向的差异是非常明显的。根据具体情况,服务器端重定向一般都可以轻松地通过Python的urllib库解决,不需要使用Selenium。客户端重定向却不能这样处理,除非你有工具可以执行JavaScript。
第二部分:实战
Selenium可以执行这种JavaScript重定向,和它处理其他JavaScript的方式一样;但是这类重定向的主要问题是什么时候停止页面监控,也就是说,怎么识别一个页面已经完全重定向。在http://pythonscraping.com/pages/javascript/redirectDemo2.html的示例页面是客户端重定向的例子,有两秒的延迟。
我们可以用一种智能的方法来检测客户端重定向是否完成,首先从页面开始加载时就“监视”DOM中的一个元素,然后重复调用这个元素直到Selenium抛出一个StaleElementReferenceException异常;也就是说,元素不在页面的DOM里了,说明这是网站已经跳转。
实例代码如下:
from selenium import webdriverimport timefrom selenium.webdriver.remote.webelement import WebElementfrom selenium.common.exceptions import StaleElementReferenceExceptiondef waitForLoad(driver): elem=driver.find_element_by_tag_name("html") count=0 while True: count +=1 if count >20: print("Timing out afer 10 seconds and returning") return time.sleep(.5) try: elem=driver.find_element_by_tag_name("html") except StaleElementReferenceException: returndriver=webdriver.PhantomJS(executable_path='/usr/bin/phantomjs')driver.get("http://pythonscraping.com/pages/javascript/redirectDemo2.html")waitForLoad(driver)print(dirver.page_source)
这个程序没半秒钟检查一次网页,看看html标签还在不在,时限为10秒钟,不过检查时间间隔和时限都可以根据实际情况随意调整。
- python网络数据采集-处理重定向问题
- python urllib2处理重定向的问题
- python网络数据采集
- Python网络数据采集
- Python网络数据采集
- Python网络数据采集
- Python网络数据采集
- Python网络数据采集
- Python网络数据采集
- Python网络数据采集
- Python网络数据采集
- Python网络数据采集
- Python网络数据采集
- python网络数据采集-处理登录和cookie
- python网络数据采集-处理格式规范的文字
- 《Python网络数据采集》学习中遇到的问题
- Python网络数据采集(1)
- Python网络数据采集-BeautifulSoup
- 【观察】vFORUM 2017,等你一起来打Call!
- 猴子吃桃算法
- 洛谷 P1006 传纸条
- Xilinx zynq7000,zynq7k上GPIO使用笔记
- 自己项目里面的aos 查询数据的语法
- python网络数据采集-处理重定向问题
- HBase架构介绍
- 网络动态服务器-1
- Java疯狂讲义读书笔记第十七章
- tomcat启用https配置
- AppScan安全扫描工具之安装及配置GlassBox
- Java Regex
- 学生成绩管理系统的链表实现
- Listary 快速ping ip