python tldextract.extract给出BadStatusLine:'';
使用python tldextract.extract给出BadStatusLine:'';,python,tld,Python,Tld,使用tldextract.extract(url)时,我收到了BadStatusLine:''错误: 子域,域,tld=tldextract.extract(url) 文件“/usr/local/venv/local/lib/python2.7/site packages/tldextract/tldextract.py”,第194行,摘录 返回TLD_提取器(url) 文件“/usr/local/venv/local/lib/python2.7/site packages/tldextract
tldextract.extract(url)
时,我收到了BadStatusLine:''
错误:
子域,域,tld=tldextract.extract(url)
文件“/usr/local/venv/local/lib/python2.7/site packages/tldextract/tldextract.py”,第194行,摘录
返回TLD_提取器(url)
文件“/usr/local/venv/local/lib/python2.7/site packages/tldextract/tldextract.py”,第128行,在调用中__
返回自我提取(netloc)
文件“/usr/local/venv/local/lib/python2.7/site packages/tldextract/tldextract.py”,第132行,摘自
已注册的\u域,tld=self.\u获取\u tld\u提取器().extract(netloc)
文件“/usr/local/venv/local/lib/python2.7/site packages/tldextract/tldextract.py”,第165行,在“获取”tld_提取器中
tlds=frozenset(tld\u source()中tld\u源中tld\u源的tld)
文件“/usr/local/venv/local/lib/python2.7/site packages/tldextract/tldextract.py”,第165行,在
tlds=frozenset(tld\u source()中tld\u源中tld\u源的tld)
文件“/usr/local/venv/local/lib/python2.7/site packages/tldextract/tldextract.py”,第204行,在PublicSuffixListSource中
页面=\u获取\u页面('http://mxr.mozilla.org/mozilla-central/source/netwerk/dns/effective_tld_names.dat?raw=1')
文件“/usr/local/venv/local/lib/python2.7/site packages/tldextract/tldextract.py”,第198行,在第页
返回unicode(urllib2.urlopen(url.read(),'utf-8')
文件“/usr/lib/python2.7/urllib2.py”,第126行,在urlopen中
return\u opener.open(url、数据、超时)
文件“/usr/lib/python2.7/urllib2.py”,第400行,打开
响应=自身打开(请求,数据)
文件“/usr/lib/python2.7/urllib2.py”,第418行,打开
"开放",
文件“/usr/lib/python2.7/urllib2.py”,第378行,在调用链中
结果=func(*args)
文件“/usr/lib/python2.7/urllib2.py”,第1207行,在http\u open中
返回self.do_open(httplib.HTTPConnection,req)
文件“/usr/lib/python2.7/urllib2.py”,第1180行,打开
r=h.getresponse(缓冲=True)
getresponse中的文件“/usr/lib/python2.7/httplib.py”,第1030行
response.begin()
文件“/usr/lib/python2.7/httplib.py”,第407行,在begin中
版本、状态、原因=self.\u读取\u状态()
文件“/usr/lib/python2.7/httplib.py”,第371行,处于读取状态
升起状态行(行)
错误状态行:“”
这是因为没有提供服务
如果您想继续使用tldextract来获取子域、域、tld,一个临时解决方案是使用缓存,例如在project/tldextractor/\uuuu init\uuuuuuuuuy.py
import os
import tldextract
TLD_CACHE_PATH = os.path.join(
os.path.abspath(os.path.dirname(__file__)), 'tldextract_cache')
tldextractor = tldextract.TLDExtract(cache_file=TLD_CACHE_PATH, fetch=False)
在项目/tldextractor/tldextract\u缓存中
:
然后:
这是由于没有得到服务
如果您想继续使用tldextract来获取子域、域、tld,一个临时解决方案是使用缓存,例如在project/tldextractor/\uuuu init\uuuuuuuuuy.py
import os
import tldextract
TLD_CACHE_PATH = os.path.join(
os.path.abspath(os.path.dirname(__file__)), 'tldextract_cache')
tldextractor = tldextract.TLDExtract(cache_file=TLD_CACHE_PATH, fetch=False)
在项目/tldextractor/tldextract\u缓存中
:
然后:
程序包正在尝试从当前不起作用的URL下载公共后缀列表:
http://mxr.mozilla.org/mozilla-central/source/netwerk/dns/effective_tld_names.dat?raw=1
这是由于,Mozilla暂时阻止了URL
这有一个缺点,尽管后者仅在您已经拥有公共后缀列表的缓存副本时才起作用
同时,请改用;它将数据捆绑在包本身中,不需要URL请求
更新:Mozilla现在将文件托管在MXR源存储库中,如果没有MXR.Mozilla.org Referer标头,则访问MXR源存储库会将您重定向到该新位置。该软件包正在尝试从当前不起作用的URL下载公共后缀列表:
http://mxr.mozilla.org/mozilla-central/source/netwerk/dns/effective_tld_names.dat?raw=1
这是由于,Mozilla暂时阻止了URL
这有一个缺点,尽管后者仅在您已经拥有公共后缀列表的缓存副本时才起作用
同时,请改用;它将数据捆绑在包本身中,不需要URL请求
更新:Mozilla现在将文件托管在MXR源存储库中,任何对MXR源存储库的访问都不会使用MXR.Mozilla.org Referer头将您重定向到该新位置。这是因为stacktrace()中的Mozilla.org URL不可用,并且
tldextract
在首次安装时尝试从该URL更新。可以禁用此实时更新(见下文),但未捕获的异常是tldextract
bug。它应该只记录异常,并无缝地回退到包的捆绑PSL
这在刚刚发布到的tldextract 1.2.1中已修复。它会切换到新的模式。因此,升级应该绕过未捕获的异常
另一个版本很快将避免将来在GitHub PSL镜像不可用时出现未捕获的异常
关闭默认提取
在以前的版本中,可以通过关闭默认的首次安装获取来避免此问题。构造您自己的TLDExtract
可调用fetch=False
。发件人:
这是因为stacktrace()中的mozilla.org URL不可用,并且
tldextract
尝试在第一次安装时从该URL进行更新。可以禁用此实时更新(见下文),但未捕获的异常是tldextract
bug。它应该只记录异常,并无缝地回退到包的捆绑PSL
这在刚刚发布到的tldextract 1.2.1中已修复。它会切换到新的模式。因此,升级应该绕过未捕获的异常
另一个版本很快将避免将来在GitHub PSL镜像不可用时出现未捕获的异常
关闭默认提取
在以前的版本中,可以通过关闭默认的首次安装获取来避免此问题。构造您自己的TLDExtract
可调用fetch=False
。发件人:
谢谢@Martijn Pieters。看起来publicsuffix不会返回tld、域和子域,对吗?@AJP:的确如此
publicsuffix
仅拆分tld。所有这些t
import tldextract
no_fetch_extract = tldextract.TLDExtract(fetch=False)
no_fetch_extract('http://www.google.com')