В вашем цикле for
эти строки:
data['title'] = container.h2.text
data['author'] = container.p.text
data['link'] = "https://open.umn.edu/opentextbooks/" + container.h2.a["href"]
сбрасывают значение словаря на каждой итерации цикла.То, что я бы посоветовал вам сделать, это сделать их список следующим образом:
data['title'] = []
data['author'] = []
data['link'] = []
, а затем в вашем цикле for есть
data["title"].append(container.h2.text)
data["author"].append(container.p.text)
data["link"].append("https://open.umn.edu/opentextbooks/" + container.h2.a["href"])
, который сохранит все найденные контейнеры,и вы должны увидеть все в вашем файле JSON.
Надеюсь, это поможет!