使用Python(或R)提取Google Scholar结果

2024-06-17 13:14:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用python来搜索google scholar的搜索结果。我找到了两个不同的脚本,一个是gscholar.py,另一个是scholar.py(这个脚本可以用作python库吗?)。

现在,我应该说我对python是完全陌生的,如果我错过了显而易见的东西,我会很抱歉!

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

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和this,但这并不能改变问题。有什么解决问题的建议吗?

我发现R的代码(见link)是一个解决方案,但很快被google屏蔽了。也许有人可以建议如何改进代码以避免被阻止?任何帮助都将不胜感激!谢谢!


Tags: 代码py脚本参数googlequeryarguments建议
3条回答

谷歌会阻止你。。。显然你不是一个浏览器。也就是说,它们会检测到同样的请求签名,这种签名对于人类活动来说太频繁了。。。。

你可以:

看起来,与Python和R的摩擦遇到了一个问题,Google Scholar将您的请求视为一个机器人查询,因为请求中缺少用户代理。StackExchange中有一个关于downloading all pdfs linked from a web page的类似问题,这个问题的答案将用户引向Unix中的wget和Python中的BeautifulSoup包。

Curl似乎也是一个更有希望的方向。

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

要使用浏览器信息访问网站,可以将url打开器类与自定义用户代理一起使用:

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 Scholar搜索结果页面中显示的结果数。

相关问题 更多 >