第一次发帖,所以我希望这是足够的细节。
我开始使用 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
}]
}]
