1. 程式人生 > >python重定向&正則取消分組

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的括號中增加”?:”, 也就是(?:省|自治區|特別行政區|市), 這樣,括號中的內容就不會被捕獲。