簡體   English   中英

在 Python 上使用 urllib.request.urlopen() 時出錯 3.2.1

[英]Getting an error when using urllib.request.urlopen() on Python 3.2.1

我正在使用 urllib.request 打開帶有 Python 3.2.1 的頁面源,但我收到一條錯誤urllib.error.HTTPError: HTTP Error 503: Service Unavailable 請在下面找到代碼和錯誤。

代碼

import re
import urllib.request

html = urllib.request.urlopen("http://www.pythonchallenge.com/pc/def/ocr.html").read().decode()

print (html)

錯誤

Traceback (most recent call last):
  File "I:/Private/nabm/python/python_challenge/python_challenge_2.py", line 4, in <module>
    html = urllib.request.urlopen("http://www.pythonchallenge.com/pc/def/ocr.html").read().decode()
  File "C:\appl\Python\3.2.1\lib\urllib\request.py", line 138, in urlopen
    return opener.open(url, data, timeout)
  File "C:\appl\Python\3.2.1\lib\urllib\request.py", line 375, in open
    response = meth(req, response)
  File "C:\appl\Python\3.2.1\lib\urllib\request.py", line 487, in http_response
    'http', request, response, code, msg, hdrs)
  File "C:\appl\Python\3.2.1\lib\urllib\request.py", line 413, in error
    return self._call_chain(*args)
  File "C:\appl\Python\3.2.1\lib\urllib\request.py", line 347, in _call_chain
    result = func(*args)
  File "C:\appl\Python\3.2.1\lib\urllib\request.py", line 495, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 503: Service Unavailable

Process finished with exit code 1

任何人都可以看到可能導致此錯誤的原因嗎?

我遇到了一些 URL 的相同問題,並提供了 header 幫助。 當我仔細研究它時,我發現服務器有時會識別出一個機器人正在嘗試訪問該網站,因此為了防止它,它們會給出一個虛假的連接錯誤。

from urllib.request import urlopen, Request
header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36."}
req = Request("url", headers=header)

response = urlopen(req, timeout=60)

HTTP錯誤503表示服務器當時由於過載或拒絕連接而無法響應。 換句話說,您無法更改代碼來對其進行修復。

我知道那已經有一段時間了。 但是,我將發布如何處理“ HTTP錯誤503”的情況,以防它可能對其他人有所幫助。 首先,我確實將request.urlretrieve(...)放入try塊中以捕獲錯誤。 就我而言,我嘗試訪問的服務器確實需要時間來處理請求。 (我訪問的服務器不是Amazon.com或據說阻止程序訪問其內容的那種服務器。)使用try塊,以防萬一發生異常,我使程序使用time.sleep等待20秒。 (20)。 這使我的程序能夠完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM