我们正在使用谷歌自定义搜索JSON API进行高等教育研究,实际上我们正在解析大量的URL,以找到有关各种组织对COVID-19的反应的信息。我们使用谷歌的API来查找顶级搜索结果。但是,我们发现在API查询中使用不同的搜索参数时存在不一致的结果。这些不一致性是一个问题,因为我们试图将查询调整到特定的错误率(错误率是提供有效研究信息的URL占所有URL的比率)。我们正在寻找帮助解释谷歌API工作原理的人,因为文档非常简略。
我们基本查询的一个示例:
'https://www.googleapis.com/customsearch/v1?key=KEY&cx=SEARCHENGINE&q="School Name" intext:(term1 | term2 | term3) -inurl:(unwanted1 | unwanted2 | unwanted3) inurl:(wanted1 | wanted2 | wanted3)&start=1'
其中“学校名称”是高等教育机构的名称。Term1,term2等都是我们想在搜索结果的正文中找到的特定变量。intext参数有助于避免某些文档中的不可见文本。例如,insidehighered.com 在不适用实际文章的情况下包含许多高等教育机构的不可见文本。Unwanted1等是我们不希望包含在URL标题中的单词或短语。例如,我们想避免PDF文档,所以一个可能是“.pdf”。Wanted1等是我们希望在URL中包含的单词,如“新闻”。我们使用“|”表示“或”,这使我们能够为多种类型的搜索利用一个查询,从而有助于最小化API使用成本。
到目前为止,我们发现了以下问题/不一致之处:
感谢您!
到目前为止,我们发现了以下问题/不一致之处:
- 使用"-" 和 "NOT" 作为取反词会返回不同的结果。
- 参数的顺序很重要。例如,"inurl:(一些想要的搜索词) -inurl:(一些不想要的搜索词)" 返回的结果与 "-inurl:(一些不想要的搜索词) inurl:(一些想要的搜索词)" 不同
- 术语的嵌套也是不一致的。例如,“inurl:((想要的术语| 想要的术语) NOT(不想要的术语| 不想要的术语))” 返回的结果与“inurl:(想要的术语| 想要的术语| NOT不需要的术语NOT不需要的术语)”不同
- 此外,API有时会返回不同的结果,即使在相同查询两次使用完全相同的查询。它似乎会返回10个结果,但自发地将最后1或2个从下一页或其他位置混合在一起。例如,此查询:“https://www.googleapis.com/customsearch/v1?key=KEY&cx=SEARCHENGINE&q="Miami University-Hamilton" intext:(reduce tuition | freeze tuition | decrease tuition | lower tuition) inurl:(news | announcement | article | story) -inurl:(registrar | admissions | tuition-and-fees | tuition-schedule | schedule | state | office | employment-opportunities | about-us | about | linkedin | events | .uk | irs | .gov | information-technology | wikipedia | wiki | employee-handbook | student-handbook | shop | annual | youtube | pinterest | store | openings | indeed | amazon | contact | job-board | jobboard | policies | frequently-asked-questions | faq | forms | hours | academic-calendar | calendar | directory | glassdoor | facebook | encyclopedia)&start=31”(然后是start=41的下一页)将" http://www.harbison.one/archive/z_1985_national_cc_directory.pdf "作为第四页的最后一项和第五页的第一项返回。当我们运行GET请求时,它有时会返回不同的结果,以便在第四页的最后一项上返回该重复网址,但是然后将该重复网址返回两个页面。
我们用于从每个页面中获取项目的代码如下:
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')
感谢您!