第一部分:客户端重定向VS服务器端重定向

客户端重定向是在服务器将页面内容发送到浏览器页面之前,由浏览器执行JavaScript完成的页面跳转,而不是服务器完成的跳转。当使用浏览器访问页面的时候,有时候很难区分这两种跳转。由于客户端重定向执行很快,加载页面是你甚至感觉不到任何延迟,所以会让你觉得这个重定向就是一个服务器端重定向。

但是,在进行网络数据采集的时候,这两种重定向的差异是非常明显的。根据具体情况,服务器端重定向一般都可以轻松地通过Python的urllib库解决,不需要使用Selenium。客户端重定向却不能这样处理,除非你有工具可以执行JavaScript。

第二部分:实战

Selenium可以执行这种JavaScript重定向,和它处理其他JavaScript的方式一样;但是这类重定向的主要问题是什么时候停止页面监控,也就是说,怎么识别一个页面已经完全重定向。在http://pythonscraping.com/pages/javascript/redirectDemo2.html的示例页面是客户端重定向的例子,有两秒的延迟。

我们可以用一种智能的方法来检测客户端重定向是否完成,首先从页面开始加载时就“监视”DOM中的一个元素,然后重复调用这个元素直到Selenium抛出一个StaleElementReferenceException异常;也就是说,元素不在页面的DOM里了,说明这是网站已经跳转。

实例代码如下:

from selenium import webdriver
import time
from selenium.webdriver.remote.webelement import WebElement
from selenium.common.exceptions import StaleElementReferenceException
def 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)
            elem=driver.find_element_by_tag_name("html")
        except StaleElementReferenceException:
            return
driver=webdriver.PhantomJS(executable_path='/usr/bin/phantomjs')
driver.get("http://pythonscraping.com/pages/javascript/redirectDemo2.html")
waitForLoad(driver)
print(dirver.page_source)
 执行结果如下: 

这个程序没半秒钟检查一次网页,看看html标签还在不在,时限为10秒钟,不过检查时间间隔和时限都可以根据实际情况随意调整。

蜜罐是一类没有实际业务用途的网络安全资源,本质是一种对攻击方进行欺骗的技术。 1.2 作用 价值是吸引攻击者对它进行非法使用, 从而帮助网络安全研究人员发现、捕获和分析攻击行为。 相比于入侵检测、防火墙等被动防护手段,蜜罐能够部署运行和捕获攻击数据, 2、物联网蜜罐 指以物联网计算、网络、感知及执行等资源为诱饵, 用于发现、捕获和分析物联网安全威胁的一种网络欺骗技术。 物联网终端设备存在的安全威胁: 缺乏身份认证 使用默认配置 固件不更新 网络安全性薄弱 2.1 构成 各写一个shell和python脚本来监控http请求,并在服务不可用的时候重启服务。监控的连接为:shell脚本如下,配合crontab计划任务每一分钟执行一次检查:#!/bin/bash#Thisshellisusedtomoniter192.168.1.101port5022&5024date#在crontab里用来记录log的时间i=0curl-s-m... print('页面跳转后重新绑定selenium.') time.sleep(3) search_window = driver.current_window_handle # 此行代码用来定位当前页面 html =driver.page_source print("打印标题") print(driver.t... from bs4 import BeautifulSoup import time #这里我已经下载了geckodriver放在火狐文件夹,如果放入所需要执行的Python脚本的所在处就不用写这个了 myDriver = webdriver.Firefox(executable_path... chromeDriver是ChromeDriver对象的实例 final String beforeUrl = chromeDriver.getCurrentUrl();// 获取登录前的url地址 while (chromeDriver.getCurrentUrl().equals(beforeUrl)){// 不断的获取地址判断一下,地址有没有变 // 页面没有跳转就让他等待,等待自己重定向到登录后的页面,然后再获取cookie时就是正确的cookie // 到这里说明页面进行了跳转 笔者使用python2.7+requests编写爬虫,以下问题针对此情况讨论。 重定向(Redirect)就是通过各种方法(本文提到的为3种)将各种网络请求重新定个方向转到其它位置(URL),编写的搜索引擎爬虫在爬取页面时遇到了网页被重定向的情况。当重定向发生在某个网站的主页时,作为该网站的入口,如果不能正确处理重定向很有可能会错失这整个网站的内容。 笔者编写的爬虫在爬取网页时遇到了三种重定向 Python数据网络采集5--处理Javascript和重定向到目前为止,我们和网站服务器通信的唯一方式,就是发出HTTP请求获取页面。有些网页,我们不需要单独请求,就可以和网络服务器交互(收发信息),那么这个网页可能采用了Ajax技术来加载数据。使用以前的采集方法,可能只能采集到加载之前的数据,重要的数据就抓不到了。和Ajax一样,动态HTML(DHTML)也是一系列用于解决网络问题的技术集合。...