Python 3 urllib HTTP 错误 412:前提条件失败
Posted
技术标签:
【中文标题】Python 3 urllib HTTP 错误 412:前提条件失败【英文标题】:Python 3 urllib HTTP Error 412: Precondition Failed 【发布时间】:2017-12-29 04:33:43 【问题描述】:我正在尝试解析网站的 html 数据。我写了这段代码:
import urllib.request
def parse(url):
response = urllib.request.urlopen(url)
html = response.read()
strHTML = html.decode()
return strHTML
website = "http://www.manarat.ac.bd/"
string = parse(website)
但它显示此错误:
Traceback(最近一次调用最后一次): 文件“C:\Users\pupewekate\Videos\RAW\2.py”,第 11 行,在 字符串 = 解析(网站) 解析中的文件“C:\Users\pupewekate\Videos\RAW\2.py”,第 5 行 响应 = urllib.request.urlopen(url) 文件 "C:\Users\pupewekate\AppData\Local\Programs\Python\Python36-32\lib\urllib\request.py", 第 223 行,在 urlopen 返回 opener.open(url, data, timeout) 文件 "C:\Users\pupewekate\AppData\Local\Programs\Python\Python36-32\lib\urllib\request.py", 第 532 行,公开响应 = meth(req, response) 文件 "C:\Users\pupewekate\AppData\Local\Programs\Python\Python36-32\lib\urllib\request.py", 第 642 行,在 http_response 'http' 中,请求、响应、代码、味精、 人类发展报告) 文件 "C:\Users\pupewekate\AppData\Local\Programs\Python\Python36-32\lib\urllib\request.py", 第 570 行,错误返回 > self._call_chain(*args) 文件 "C:\Users\pupewekate\AppData\Local\Programs\Python\Python36-32\lib\urllib\request.py", 第 504 行,在 _call_chain 结果 = func(*args) 文件 "C:\Users\pupewekate\AppData\Local\Programs\Python\Python36-32\lib\urllib\request.py", 第 650 行,在 http_error_default 中引发 HTTPError(req.full_url, code, msg, hdrs, fp) urllib.error.HTTPError: HTTP 错误 412: 前提 失败
有什么办法吗?
【问题讨论】:
【参考方案1】:该网站检查用户代理标头。如果它不能识别它的值,它会返回状态码 412:
import requests
print(requests.get('http://www.manarat.ac.bd/'))
# <Response [412]>
print(requests.get('http://www.manarat.ac.bd/', headers='User-Agent': 'Chrome'))
# <Response [200]>
请参阅this answer 了解如何在 urllib 中设置用户代理。
【讨论】:
【参考方案2】:你可以使用 requests 模块,因为它更容易实现,否则如果你确定使用 urllib,你可以使用这个:
import urllib
def parse(url):
headers = 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3;Win64;x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'
response = urllib.request.urlopen(url,headers=headers)
print response
website = "http://www.manarat.ac.bd/"
string = parse(website)
【讨论】:
以上是关于Python 3 urllib HTTP 错误 412:前提条件失败的主要内容,如果未能解决你的问题,请参考以下文章
Python 使用 urllib2 抓取网页 Http 错误 500
urllib.error.HTTPError:HTTP 错误 404:未找到 - python