Python 使用请求时缺少架构异常
我有一个person类,该类为我提供了此人的详细信息,如下所示: Datatracker.py类Python 使用请求时缺少架构异常,python,python-requests,Python,Python Requests,我有一个person类,该类为我提供了此人的详细信息,如下所示: Datatracker.py类 @dataclass class Person: resource_uri: str id: int name: str name_from_draft: str ascii: str ascii_short: Optional[str] user: str time: str photo: str photo_thum
@dataclass
class Person:
resource_uri: str
id: int
name: str
name_from_draft: str
ascii: str
ascii_short: Optional[str]
user: str
time: str
photo: str
photo_thumb: str
biography: str
consent: bool
现在,我定义了一个函数,它将充当生成器,并根据时间戳在datatracker中打印人员详细信息:
def people(self, since="1970-01-01T00:00:00", until="2038-01-19T03:14:07", name_contains=None):
"""
A generator that returns people recorded in the datatracker. As of April
2018, there are approximately 21500 people recorded.
Parameters:
since -- Only return people with timestamp after this
until -- Only return people with timestamp before this
name_contains -- Only return peopls whose name containing this string
Returns:
An iterator, where each element is as returned by the person() method
"""
url = self.base_url + "/api/v1/person/person/?time__gt=" + since + "&time__lt=" + until
if name_contains is not None:
url = url + "&name__contains=" + name_contains
while url is not None:
r = self.session.get(url, verify=True)
meta = r.json()['meta']
objs = r.json()['objects']
url = meta['next']
for obj in objs:
yield obj
当我尝试只打印另一个文件中的人的名字时,尽管它打印了所有的名字,但它会导致一个异常错误,如下所示。
**app.py**
import requests
import datatracker
import rfcindex
user=datatracker.DataTracker()
user_people = user.people("1970-01-01T00:00:00", "2038-01-19T03:14:07", "")
for u in user_people:
print(u['name'])
请帮助以下琐碎脚本重复了您的问题:
import requests
result = requests.get('/api/v1')
输出
Traceback (most recent call last):
File "example.py", line 3, in <module>
result = requests.get('/api/v1')
...
Several lines removed for brevity
...
requests.exceptions.MissingSchema: Invalid URL '/api/v1': No schema supplied. Perhaps you meant http:///api/v1?
对于您的特定情况,只需在代码中添加一行:
import requests
import datatracker
import rfcindex
user = datatracker.DataTracker()
user.base_url = 'https://' + user.base_url
user_people = user.people("1970-01-01T00:00:00", "2038-01-19T03:14:07", "")
for u in user_people:
print(u['name'])
这个完整的示例演示了如何使用与您使用的类具有相同问题的类从站点获取前20个名称:
import requests
class DataTracker:
def __init__(self):
self.base_url = 'datatracker.ietf.org'
def people(self):
url = self.base_url + '/api/v1/person/person'
result = requests.get(url)
data = result.json()
for value in data['objects']:
yield value['name']
data_tracker = DataTracker()
data_tracker.base_url = 'https://' + data_tracker.base_url
for person in data_tracker.people():
print(person)
如果您无法让这个示例程序运行,那么您还有其他一些问题。我认为错误消息只是意味着您需要在URL前面加上类似“http://”的前缀。我正在获取名称,但是这个错误也会随之弹出,我不应该更改class和def函数,但我可以在导入其他python文件的最后一个文件中做一些事情。请帮助我如何修改它,您只需正确设置
self.base\u url
。错误显示您的url错误-您只有/api/…
,但需要完整的urlhttp://some_domain.com/api/...
self-base url被正确地指向,理想情况下,当我尝试在浏览器中运行时,例如,我正在获取xml文件,我只能从中获取名称。我无法从中获取名称。我在哪里添加此脚本?在哪里初始化了self.base\u url
?它是在不可修改的基础文件中完成的。我所能修改的只是导入此python文件的最后一个文件是否存在接受base\u url
参数?是的,在基类中有一个这样定义的参数:def uu init uu_;(self):self.session=requests.session()self.base\u url=,但我不应该对此进行任何更改
import requests
import datatracker
import rfcindex
user = datatracker.DataTracker()
user.base_url = 'https://' + user.base_url
user_people = user.people("1970-01-01T00:00:00", "2038-01-19T03:14:07", "")
for u in user_people:
print(u['name'])
import requests
class DataTracker:
def __init__(self):
self.base_url = 'datatracker.ietf.org'
def people(self):
url = self.base_url + '/api/v1/person/person'
result = requests.get(url)
data = result.json()
for value in data['objects']:
yield value['name']
data_tracker = DataTracker()
data_tracker.base_url = 'https://' + data_tracker.base_url
for person in data_tracker.people():
print(person)