【发布时间】:2020-12-14 20:17:05
【问题描述】:
我们正在使用 Google 的自定义搜索 JSON API 进行高等教育研究,我们实质上是在解析大量 URL 以查找有关各种组织对 COVID-19 的响应的信息。我们正在使用 Google 的 API 来查找热门搜索结果。但是,我们发现在 API 查询中使用不同的搜索参数时会出现不一致的结果。不一致是一个问题,因为我们正试图将查询磨练到一定的错误率(错误率是有多少 URL 提供了有效的研究信息)。我们正在寻找帮助解释 Google 的 API 工作原理的人,因为文档非常少。 我们的基本查询示例: 'https://www.googleapis.com/customsearch/v1?key=KEY&cx=SEARCHENGINE&q="学校名称" intext:(term1 | term2 | term3) -inurl:(unwanted1 | Wanted2 | Wanted3) inurl:(想要1 | 想要2 | 想要3)&start=1'
其中“学校名称”是高等教育机构的名称。 term1、term2 等,是我们要在搜索结果的正文中查找的具体变量。 intext 参数有助于避免某些文档中出现不可见的文本。例如,insidehighered.com 以隐形文本包含许多高等教育机构,但实际文章不适用。不需要的 1 等。是我们不希望包含在 URL 标题中的单词或短语。例如,我们要避免使用 PDF 文档,因此可以是“.pdf”。通缉1等。是我们希望在 URL 中出现的字词,例如“新闻”。我们使用“|”表示“或”,这使我们可以将一个查询用于多种类型的搜索,从而有助于最大限度地降低 API 使用成本。
到目前为止,我们发现了以下问题/不一致:
- "-" 和 "NOT" 否定词返回不同的结果。
- 参数的顺序很重要。例如,“inurl:(一些想要的搜索词)-inurl:(一些不需要的搜索词)”返回的结果与“-inurl:(一些不需要的搜索词)inurl:(一些想要的搜索词)”不同。
- 术语的嵌套也不一致。例如,“inurl:( (需要的术语 | 需要的术语) NOT(不需要的术语 | 不需要的术语))”返回的结果与“inurl:(需要的术语 | 需要的术语| NOT不需要的术语不是不需要的术语)”不同。
- 此外,API 有时会在两次不同时间使用相同的精确查询对某些查询返回不同的结果。查询似乎将返回 10 个结果,但会自发地混合来自下一页或其他地方的最后 1 或 2 个结果。例如,此查询:“https://www.googleapis.com/customsearch/v1?key=KEY&cx=SEARCHENGINE&q="Miami University-Hamilton" intext:(减少学费 | 冻结学费 | 减少学费 | 降低学费) inurl: (新闻|公告|文章|故事)-inurl:(注册商|招生|学费和费用|学费时间表|时间表|状态|办公室|就业机会|关于我们|关于|linkedin|事件|.uk|国税局 | .gov | 信息技术 | * | 维基 | 员工手册 | 学生手册 | 商店 | 年度 | youtube | pinterest | 商店 | 职位空缺 | 确实 | 亚马逊 | 联系 | 工作板 | 工作板 | 政策 | 常见问题-问题 | 常见问题 | 表格 | 小时 | 学术日历 | 日历 | 目录 | glassdoor | facebook | 百科全书)&start=31"(然后 start=41 进入下一页)将返回 "http://www.harbison.one /archive/z_1985_national_cc_directory.pdf”作为第 4 页的最后一项和第 5 页的第 1 项。当我们运行 GET 请求时,它有时会为第 4 页的最后一项返回不同的结果,但随后会为两个页面返回相同的重复 URL。
我们用于从每个页面中提取项目的代码是:
response = requests.get(query)
content = response.json()
hrefs = []
try:
for i in content['items'][0:num]:
hrefs.append(i['link'].lower())
except Exception as e:
print(str(e))
hrefs.append('a')
谢谢!
【问题讨论】:
-
您是否尝试过使用一组较小的查询参数(即仅 q 参数)调用 API?我想知道是否可以合理地说,如果即使使用最少的参数仍然存在不一致,那么它们可能不是由使用 NLP 技术引起的(正如@katzenklavier 所提到的),而是由最近的新索引资源。相反,如果没有发现不一致,那么查询中使用了太多的参数可能是问题的原因。
-
@Labaguette 好点。当我们运行我们的程序时,我们只使用“q”参数来运行它——这产生了一致的结果。具有多个参数的策略减少了 90% 的必要搜索,但就像我们正在谈论的那样,它是不一致的。
标签: python google-api google-custom-search