Advertisement

python爬虫解决网页重定向问题

阅读量:

笔者使用python2.7+requests编写爬虫,以下问题针对此情况讨论。

笔者开发了一个搜索引擎爬虫,在执行页面抓取任务时遇到了网页被重定向的情况。即通过多种手段将网络请求重新导向其他位置(URL)。每个网站的主页都是该网站资源的重要入口点。若未妥善处理网页重定向问题,则可能导致无法完整获取整个网站的内容。

笔者开发了一个搜索引擎爬虫,在执行页面抓取任务时遇到了网页被重.redirect的情况. 即通过多种手段将网络请求重新导向其他位置 URL. 每个网站的主页都是该网站资源的重要入口点. 若未妥善处理网页重 redirect 问题,则可能导致无法完整获取整个 website 的内容.

笔者编写的爬虫在爬取网页时遇到了三种重定向的情况。

服务器端重定向通常在完成后自动处理,并非爬虫需做特别处理。

在网页中使用metarefresh技术(即metarefresh),它通过标记指定一个目标地址来实现页面重定向。这种功能由浏览器自动执行,并需通过编程实现相应的处理逻辑。例如,在某个具体的重定向案例中(如以下HTML代码中的第3行所示),浏览器能够自行跳转至目标地址。然而,在实际应用中发现,在使用此类机制时存在一定的局限性:爬虫无法直接访问目标页面而只能获取原始页面内容

在网页中使用metarefresh技术(即metareflex),它通过标记指定一个目标地址来实现页面重定向功能。这种功能由浏览器自动执行,并需通过编程实现相应的处理逻辑。例如,在某个具体的重定向案例中(如以下HTML代码中的第3行所示),浏览器能够自行跳转至目标地址。然而,在实际应用中发现,在使用此类机制时存在一定的局限性:爬虫无法直接访问目标页面而只能获取原始页面内容

复制代码
 <html>

    
 <head>
    
 <meta http-equiv="refresh" content="0.1;url=http://www.redirectedtoxxx.com/"><!--本网页会在0.1秒内refresh为url所指的网页-->
    
 </head>
    
 </html>
    
    
    
    
    代码解释

解决办法是通过获取跳转前页面的源码,并从中提取出目标Url信息的具体步骤如下:首先,在代码中找到包含重定向功能的部分;然后执行以下操作:①使用xPath表达式定位到包含 refresh 指令的 meta 标签中的 refresh 属性值;②利用regular expression来匹配包含目标Url的内容,并特别注意括号中的内容以确保正确捕获所需的Url信息。

3.js 重定向,通过JavaScript代码形式进行重定向。如下面JavaScript代码

复制代码
    <script language=javascript>window.location.href='http://www.redirectedtoxxx.com'</script>
    
    代码解释

就这种跳转而言,因为支持该功能的JavaScript语句形式多样,在无法统一规范的情况下就不再依赖正则表达式提取URL这一单一方式了。因此无法仅通过正则表达式提取URL,并且必须采取加载JavaScript代码的方式来处理这一问题。

全部评论 (0)

还没有任何评论哟~