私は現在、Ryan MitchellのPythonによるWeb Scrapingを行っています。彼はエラー処理について語っ第一章では、彼は言う:urlopen not returningなしURLが誤って入力されたときにオブジェクト
サーバーが全く見つからない場合(たとえば、サイトがダウンした、またはURL を入力ミスしていた場合)、
None
オブジェクトを返しますurlopen
。
これをテストするため、次のスニペットを作成しました。このコードの第二の最後の行で
from urllib.request import urlopen
from urllib.error import HTTPError
from bs4 import BeautifulSoup as bs
def getTitle(url):
try:
html = urlopen(url).read()
except HTTPError:
return None
try:
bsObj = bs(html)
except AttributeError:
return None
return bsObj
title = getTitle('http://www.wunderlst.com')
print(title)
、私は意図的に(実際のURLがhttp://www.wunderlist.com
ある)URL名を誤って入力しています。私はNone
が私の画面に印刷されることを望んだ。しかし、私はエラーの長いリストを取得します。以下は、私は、エラーメッセージの最後の部分を与えている:
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "ex4.py", line 18, in <module>
title = getTitle('http://www.wunderlst.com')
File "ex4.py", line 8, in getTitle
html = urlopen(url).read()
File "/usr/lib/python3.4/urllib/request.py", line 161, in urlopen
return opener.open(url, data, timeout)
File "/usr/lib/python3.4/urllib/request.py", line 463, in open
response = self._open(req, data)
File "/usr/lib/python3.4/urllib/request.py", line 481, in _open
'_open', req)
File "/usr/lib/python3.4/urllib/request.py", line 441, in _call_chain
result = func(*args)
File "/usr/lib/python3.4/urllib/request.py", line 1210, in http_open
return self.do_open(http.client.HTTPConnection, req)
File "/usr/lib/python3.4/urllib/request.py", line 1184, in do_open
raise URLError(err)
urllib.error.URLError: <urlopen error [Errno -2] Name or service not known>
、私はURLの名前を訂正しますが、例えば、ウェブサイトの前にいくつか存在しないページを作成する場合:
title = getTitle('http://www.wunderlist.com/something')
その後私はNone
を画面に印刷します。私は本当にこれについて混乱しています。実際に何が起きているのか誰でも親切に説明できますか?前もって感謝します。
これは便利です。なぜこの本に「URLError」は言及されていないのか分かりません。 – Peaceful