2017-06-19 4 views
0

リクエストモジュールを使用して、単語リストのアイテムがhttps://www.britannica.comの記事であるかどうかを確認しています。私の現在のコードは次のとおりです。'request'モジュールがリストに含まれているときにウェブページを正しくpingしていない

import requests 

words = ['no', 'yes', 'thermodynamics', 'london', 'Max-Factor', 'be'] 

for word in words: 
    request = requests.head('https://www.britannica.com/topic/' + word.lower()) 
    if request.status_code == 200: 
     print(">EXISTS") 
     print('https://www.britannica.com/topic/' + word.lower()) 
     print("<") 
    else: 
     print(">DOESNT EXIST") 
     print('https://www.britannica.com/topic/' + word.lower()) 
     print("<") 

はプリントが「が存在」という文字列のみである「こと」が、「熱力学」、「ロンドン」、および「マックスファクター」はまた存在し、プログラムのプリント「のdoesntが存在します」 。私が熱力学だけで操作すると、 'EXISTS'が正しく出力されます。不一致の理由と可能な回避策は何ですか?おそらく、さまざまなWebページ(「最小」を持つ「Be」)の読み込み時間ですか?

+0

についてあなたは 'for'ループの下で、あなたの' if..else'ブロックをインデント方法は? – zwer

+0

@zwerが修正されました。元のコードと同じになりました。 – user109474

答えて

1

britanica.comはおそらくロードバランシングのためにリダイレクトを使用するため、200の代わりにステータス301が表示されることがよくあります。あなたが使用している場合requestsモジュールは、リダイレクトに従うことができます:

request = requests.head('https://www.britannica.com/topic/' + word.lower(), 
         allow_redirects=True) 
+0

'allow_redirects'は通常は' True'にデフォルト設定されていますが、 'head'のデフォルトは' False'です – Wondercricket

関連する問題