Skip to main content
 首页 » 编程设计

python之MQL 查询的“空”结果。 Freebase 架构 :/film/film/starring &/film/actor/film

2025年05月04日14birdshome

第一次发帖,所以我希望这是足够的细节。

我开始使用 freebase-python今天是为了获取我正在制作的节目的电影信息。我需要抓取的一件事是主演电影的 Actor 名单。我已经按照一些教程和指南来执行此操作,并且可以获得导演或电影导演的电影列表,但是当我尝试对 Actor 或电影 Actor 做同样的事情时,我得到“空”结果。

我在 Python 和 Freebase MQL 查询编辑器中都遇到了同样的问题,您可以在下面看到我尝试过的内容。可以找到以下在编辑器中编写的所有示例的链接 here ,因为 Stack Overflow 不允许我在第一篇文章的每个示例下方发布链接!

Python 中的

工作 主管查询:

import freebase 
fb = freebase.mqlread 
q = {'type':'/film/film', 'name':'Inception', 'directed_by':[]} 
fb(q) 

工作导演的 Python 片目查询:

import freebase 
fb = freebase.mqlread 
q = {'type':'/film/director', 'name': 'Christopher Nolan', 'film':[]} 
fb(q) 

基于这些测试,我尝试对 Actor 做同样的事情,但结果很奇怪:

不工作 Python 中的 Actor 列表查询:

import freebase 
fb = freebase.mqlread 
q = {'type':'/film/film', 'name':'Inception', 'starring':[]} 
fb(q) 

不工作 Actor 在 Python 中的片目查询:

import freebase 
fb = freebase.mqlread 
q = {'type':'/film/actor', 'name':'Leonardo DiCaprio', 'film':[]} 
fb(q) 

奇怪的是,我得到了准确数量的 Actor /电影,但没有名字。有谁知道问题可能是什么?非常感谢,如果有任何建议,我将不胜感激。

请您参考如下方法:

那是因为电影和 Actor 并不是直接相连的,而是通过一个没有名字的“中介”节点。这是因为同时需要连接三件事:1) 电影,2) Actor ,以及 3) 角色/角色。

在编写任何 MQL 之前,您需要查看要使用的域/类型的架构,以了解信息的存储方式。

另请注意,如果您只是匹配名称,您将获得翻拍的副本等。您应该跟踪 ID 以消除所有歧义。这是修改后的查询:

[{ 
  "type": "/film/film", 
  "name": "Inception", 
  "mid":  null, 
  "starring": [{ 
    "actor": null, 
    "mid":   null 
  }] 
}]​