python重定向&正则取消分组

https://yq.aliyun.com/ziliao/4510

2016年最长的假期也过了,这周连上7天班,之前还觉得挺恐怖,没想到这周真是要忙死的节凑,还真没觉得多漫长,一晃明天就周五了,干运维的就是突发的事情多,冷不丁的不知道哪里就冒出个问题,就够搞半天的,最近领导有一批站点,需要检测这些站点是否重定向到了其它url上,因为站点太多,这种事就只能通过脚本来实现了,当然我还是用个人最喜欢的request模块来完成这个任务,基本原理就是判断站点返回的status_code,如果是3XX,就认为是重定向了,当然还有其它情况,比如访问超时,域名解析错误,网络错误等,也要做基本的判断,最起码要能报出来,需要检测的站点放到了一个文件里,因为站点收集的格式不统一,就做了简单的判断,如果不是以http开通的,就加上http,拼接成完整的url,整个脚本如下:

#!/usr/bin/env python
 
import sys
import requests
 
 
def check_for_redirects(url):
    try:
        r = requests.get(url, allow_redirects=False, timeout=0.5)
        if 300 <= r.status_code < 400:
            return r.headers['location']
        else:
            return '[no redirect]'
    except requests.exceptions.Timeout:
        return '[timeout]'
    except requests.exceptions.ConnectionError:
        return '[connection error]'
 
 
def check_domains(urls):
    for url in urls:
        url_to_check = url if url.startswith('http') else "http://%s" % url
        redirect_url = check_for_redirects(url_to_check)
        print("%s => %s" % (url_to_check, redirect_url))
 
 
if __name__ == '__main__':
    fname = 'domains.txt'
    try:
        fname = sys.argv[1]
    except IndexError:
        pass
    urls = (l.strip() for l in open(fname).readlines())
    check_domains(urls)

脚本就定义了2个函数,一个是负责检查结果的返回,一个从文件读取url,主要是根据r.status_code的返回值来进行判断,这个在开通已经说过了,就不在重复了,其它部分也很好理解,如有不明白的可以给我留言。

 

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索站点 , 模块 错误 python获取重定向url、python url重定向、重定向例子、python 重定向、python 输出重定向,以便于您获取更多的相关知识。

 

在正则中,分组有重要的作用,但有时候,我们并不想要分组。比如,给定一系列的地址字符串,要找出省份名称。如:‘江苏省苏州市虎丘区马涧路靠近白马涧花园‘, ’广西壮族自治区玉林市容县’等。 
代码如下:

import re 
pattern_0 = re.compile(r'(.*?(省|自治区|特别行政区|市))')
pattern_1 = re.compile(r'(.*?(?:省|自治区|特别行政区|市))')
s = '江苏省苏州市虎丘区马涧路靠近白马涧花园'
result_0 = re.search(pattern_0, s).groups()
result_1 = re.search(pattern_1, s).groups()

In[242]: result_0
Out[242]: ('江苏省', '省')
In[243]: result_1
Out[243]: ('江苏省',)

可见,result_0中的分组结果中有两个元素,而第二个元素‘省’不是我们需要的,所以在pattern_1的括号中增加”?:”, 也就是(?:省|自治区|特别行政区|市), 这样,括号中的内容就不会被捕获。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值