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的括号中增加”?:”, 也就是(?:省|自治区|特别行政区|市)
, 这样,括号中的内容就不会被捕获。