使用 Python(或 R)提取谷歌学术搜索结果

新手上路,请多包涵

我想用 python 来抓取谷歌学术搜索结果。我找到了两个不同的脚本来执行此操作,一个是 gscholar.py ,另一个是 scholar.py (那个可以用作 python 库吗?)。

现在,我也许应该说我是 python 的新手,如果我错过了显而易见的事情,我深表歉意!

问题是当我使用 gscholar.py 如 README 文件中所述时,我得到了结果

query() takes at least 2 arguments (1 given)

即使我指定了另一个参数(例如 gscholar.query("my query", allresults=True) ,我得到

query() takes at least 2 arguments (2 given)

这让我很困惑。我还尝试指定第三个可能的参数( outformat=4 ;这是 BibTex 格式),但这给了我一个函数错误列表。一位同事建议我在运行查询之前导入 BeautifulSoup 和 这个,但这并没有改变问题。有什么建议可以解决这个问题吗?

我找到了 R 的代码(参见 链接)作为解决方案,但很快就被谷歌屏蔽了。也许有人可以建议如何改进该代码以避免被阻止?任何帮助,将不胜感激!谢谢!

原文由 Flow 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

我建议您不要使用特定的库来抓取特定的网站,而是使用经过良好测试并具有格式良好的文档的通用 HTML 库,例如 BeautifulSoup。

要使用浏览器信息访问网站,您可以使用带有自定义用户代理的 url opener 类:

 from urllib import FancyURLopener
class MyOpener(FancyURLopener):
    version = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.152 Safari/537.36'
openurl = MyOpener().open

然后下载需要的url如下:

 openurl(url).read()

要检索学者结果,只需使用 http://scholar.google.se/scholar?hl=en&q=${query} url。

要从检索到的 HTML 文件中提取信息片段,您可以使用这段代码:

 from bs4 import SoupStrainer, BeautifulSoup
page = BeautifulSoup(openurl(url).read(), parse_only=SoupStrainer('div', id='gs_ab_md'))

这段代码提取了一个具体的 div 元素,其中包含 Google 学术搜索结果页面中显示的结果数。

原文由 Julia 发布,翻译遵循 CC BY-SA 3.0 许可协议

谷歌会阻止你……因为很明显你不是浏览器。也就是说,与合理的人类活动相比,它们会检测到出现频率太高的相同请求签名。

你可以做:


编辑 2020 年

你可能想检查 学术

>>> search_query = scholarly.search_author('Marty Banks, Berkeley')
>>> print(next(search_query))
{'_filled': False,
 'affiliation': 'Professor of Vision Science, UC Berkeley',
 'citedby': 17758,
 'email': '@berkeley.edu',
 'id': 'Smr99uEAAAAJ',
 'interests': ['vision science', 'psychology', 'human factors', 'neuroscience'],
 'name': 'Martin Banks',
 'url_picture': 'https://scholar.google.com/citations?view_op=medium_photo&user=Smr99uEAAAAJ'}

原文由 0x90 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏