2017-02-04 10 views
0

ウェブサイトのリスト全体をテストして、そのURLが有効であるかどうかを確認しようとしています。PythonでURLを確認する

import urllib2 

filename=open(argfile,'r') 
f=filename.readlines() 
filename.close() 

def urlcheck() : 
    for line in f: 
     try: 
      urllib2.urlopen() 
      print "SITE IS FUNCTIONAL" 
     except urllib2.HTTPError, e: 
      print(e.code) 
     except urllib2.URLError, e: 
      print(e.args) 
urlcheck() 
+0

コードはどのように機能しませんか? – usr2564301

答えて

0

requestsライブラリを使用することをお勧めします。

import requests 
resp = requests.get('your url') 
if not resp.ok: 
    print resp.status_code 
1

あなたが

リトルエラーコードのビットとHTTPError

からのすべてのHTTPレスポンスを検討するためのURLに

def urlcheck() : 
    for line in f: 
     try: 
      urllib2.urlopen(line) 
      print line, "SITE IS FUNCTIONAL" 
     except urllib2.HTTPError, e: 
      print line, "SITE IS NOT FUNCTIONAL" 
      print(e.code) 
     except urllib2.URLError, e: 
      print line, "SITE IS NOT FUNCTIONAL" 
      print(e.args) 
     except Exception,e: 
      print line, "Invalid URL" 

いくつかのエッジケースや物事を渡す必要がありますサーバーには数字の「ステータスコード」が含まれています。 状況コードによって、サーバーが 要求を実行できないことが示されることがあります。既定のハンドラーは、これらの応答の一部を処理します(たとえば、応答が「リダイレクト」の場合、クライアントが別のURLから文書を取得するように要求する )。 urllib2が処理します)。それらが処理できない場合、urlopen はHTTPErrorを送出します。典型的なエラーには '404'( が見つかりません)、403(要求禁止)、401(認証 が必要)が含まれます。

HTTPErrorが発生した場合でも、あなたはので、時にはURLが、それはコード403401などでHTTPErrorを上げることが有効で使用可能であっても、エラーコード

  • をチェックすることがあります。あなたもまた、urlopen関数のパラメータとしてURLを渡す必要が5xx
0

ServerErrors一時的に起因する

  • いつか有効なURLを与えるだろう。

    import urllib2 
    
    filename=open(argfile,'r') 
    f=filename.readlines() 
    filename.close() 
    
    def urlcheck() : 
        for line in f: 
         try: 
          urllib2.urlopen(line) # careful here 
          print "SITE IS FUNCTIONAL" 
         except urllib2.HTTPError, e: 
          print(e.code) 
         except urllib2.URLError, e: 
          print(e.args) 
    urlcheck() 
    
  • 0
    import urllib2 
    
    def check(url): 
        request = urllib2.Request(url) 
        request.get_method = lambda : 'HEAD' # gets only headers without body (increase speed) 
        request.add_header('Content-Encoding', 'gzip, deflate, br') # gets archived headers (increase speed) 
        try: 
         response = urllib2.urlopen(request) 
         return response.getcode() <= 400 
        except Exception: 
         return False  
    
    ''' 
    Contents of "/tmp/urls.txt" 
    
    http://www.google.com 
    https://fb.com 
    http://not-valid 
    http://not-valid.nvd 
    not-valid 
    ''' 
    filename = open('/tmp/urls.txt', 'r') 
    urls = filename.readlines() 
    filename.close() 
    
    for url in urls: 
        print url + ' ' + str(check(url)) 
    
    0

    私はおそらく、このようにそれを記述します。

    import urllib2 
    
    with open('urls.txt') as f: 
        urls = [url.strip() for url in f.readlines()] 
    
    def urlcheck() : 
        for url in urls: 
         try: 
          urllib2.urlopen(url) 
         except (ValueError, urllib2.URLError) as e: 
          print('invalid url: {}'.format(url)) 
    
    urlcheck() 
    

    OPのオリジナル実装からいくつかの変更:

    • /クローズデータファイル
    • を開くには、コンテキストマネージャを使用します
    • ファイルから読み込んだURLの改行を取り除く
    • より良い変数名
    • より近代的な例外処理のスタイル
    • へのスイッチはまた、不正なURLの
    • 表示より便利なエラーメッセージ

    出力例とValueErrorをキャッチ使用:

    $ python urlcheck.py 
    invalid url: http://www.google.com/wertbh 
    invalid url: htp:/google.com 
    invalid url: google.com 
    invalid url: https://wwwbad-domain-zzzz.com