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

2024-03-26

我想使用 python 来抓取谷歌学术搜索结果。我找到了两个不同的脚本来做到这一点,一个是gscholar.py https://github.com/venthur/gscholar另一个是scholar.py(那个可以用作 python 库吗?)。

现在,我也许应该说我对 python 完全陌生,如果我错过了显而易见的事情,我很抱歉!

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

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

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

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

这让我很困惑。我还尝试指定第三个可能的参数(outformat=4;这是 BibTex 格式),但这给了我一个函数错误列表。一位同事建议我导入 BeautifulSoup 并this http://code.activestate.com/recipes/523047-search-google-scholar/在运行查询之前,但这也不会改变问题。有什么建议如何解决问题吗?

我找到了 R 的代码(参见link http://www.github.com/gimoya/theBioBucket-Archives/blob/master/R/Functions/GScholarScraper_3.1.R)作为解决方案,但很快就被谷歌屏蔽了。也许有人可以建议如何改进该代码以避免被阻止?任何帮助,将不胜感激!谢谢!


我建议您不要使用特定的库来抓取特定的网站,而是使用经过良好测试且具有良好格式文档的通用 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 学术搜索结果页面中显示的结果数的元素。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Python(或 R)提取 Google Scholar 结果 的相关文章

随机推荐

  • Excel 加载项失败并显示 0x8004063E

    我有一个 Excel 添加 它曾经完美地工作 最近 许多客户收到以下错误 在这个问题的最后 环境详情 Windows 7 8 64 位 微软 Office 2013 64 位 Add in是在 net 3 5下编译的 任何帮助将不胜感激 H
  • Scala 模板将样式应用于 inputText 的标签 [Play 2 HTML5 辅助标签]

    我正在使用带有输入助手的 scala 模板 我使用的类属性应用样式
  • C# - Silverlight 中 .NET ArrayList.ToArray(Type) 的替换

    下面是我编写的一个简单方法 非常简化 所以我希望它仍然能够理解要点 用于获取字符串中数组元素的字符串表示形式 并将它们转换为这些值的实际数组 t 是数组的类型 DeserializeArray string sArrayElements o
  • 在 Tomcat 上安装 Sonar 和 Jenkins

    我有一个 tomcat 服务器 我想在上面安装 Jenkins 和 Sonar 我使用的是 debian 发行版 因此我通过 apt get 获得了 tomcat6 和 Jenkins 当我将 jenkins war 复制到 tomcat6
  • python:从程序运行交互式 python shell

    我经常遇到这样的情况 我将编写一个脚本 并且我正在编写脚本的一部分 我想以交互方式使用一些变量 到达该部分需要运行我已经编写的脚本的大部分 在这种情况下 从 shell 内部运行该程序并非易事 我必须以某种方式重新创建该函数的条件 我想做的
  • 为什么这不能是一个原始的?

    我正在摆弄 JavaScript 并注意到this永远不可能是原始的 我在说什么 让我解释 以这个函数为例 function test return typeof this test call Abc object test call 12
  • MVP 观点到底有多蠢?

    我正在尝试学习 MVP 但有些事情让我困惑 如果Presenter使用视图作为界面 那么View就不能只是控件的简单渲染 想象一下 尝试编写一个打字练习游戏 其中单词是随机生成到 UI 中的 用户必须在单词从屏幕上落下时输入单词 所以视图将
  • 以编程方式搜索 GMail?

    有没有什么方法可以以编程方式搜索 GMail 最好使用 C 例如 我想获取与搜索匹配的所有电子邮件标签 MyLabel 来自 电子邮件受保护 cdn cgi l email protection 以便我可以根据需要解析电子邮件正文 我发现的
  • 鼠标悬停在绝对定位的 div 上触发

    客观的 当将鼠标悬停在表格单元格上时 表格单元格的右上角会出现一个小的放大镜图标 将鼠标悬停在放大镜图标上并单击它将打开一个对话框窗口 以显示有关特定表格单元格中的项目的详细信息 我想为数百个表格单元重复使用相同的图标 而不是每次都重新创建
  • 以编程方式将库导入到 Databricks 中的工作区

    我想以编程方式添加一个 Python Wheel 库到 SharedDatabricks 上的工作区 在 GUI 中 工作区 gt 导入 gt 库 很容易做到 但我不知道如何在 Databricks CLI 中做到这一点 所以我想我有两种可
  • 如何删除solidity中的数组项

    我正在尝试删除 Solidity 数组中的某个项目 我正在探索一些文章 https ethereum stackexchange com questions 1527 how to delete an element at a certai
  • 获取 Linux 中 Windows 路径的基本名称

    假设我有一个包含 Windows 文件地址的字符串 比方说 local address C TEMP filename txt 从我使用的上述地址检索文件名 import os filename os path basename local
  • 如何计算按 toshortdatestring 分组的表的行数?

    我们有一个具有以下结构的数据库 public partial class ChartData public int Id get set public DateTime Timestamp get set public string Fun
  • java.lang.NoClassDefFoundError:com.google.android.gms.ads.AdView

    我正在编写一段代码来在我的 Android 应用程序中显示 Admob 横幅 为了实现这一目标 我做了以下一些调整 配置的谷歌播放服务库如下 https developers google com mobile ads sdk docs h
  • 在 Whatsapp Business Cloud api 中向多个收件人发送消息

    有没有一种方法可以在一个发布请求中向多个收件人发送消息 与我发送用分号分隔的电子邮件的方式相同 WhatsApp Business Cloud API 中没有选项可以一次性向多个电话号码发送消息 您必须一一发送或通过循环发送消息
  • React Material-UI 禁用处理程序中的按钮

    尝试在用户单击按钮后禁用该按钮 但通过处理程序函数 我参考过这两个类似的问题 React Material UI 禁用时如何为按钮提供自定义颜色 https stackoverflow com questions 55586626 reac
  • ASP.NET FileUpload:选择文件后如何自动回发?

    我正在开发 ASP NET 应用程序 在 FileUpload 控件中选择文件后 我需要回发到服务器 而不必让用户显式单击 提交 按钮 这可能吗 如果是这样 怎么办 我假设您想立即开始上传 如果是这样 您应该对此做出反应changeJava
  • 在 C++ 中访问父命名空间

    我有一个类似以下的场景 class criterion stuff about criteria namespace hex class criterion public criterion does not compile This sh
  • 双精度数据类型的简单数学运算比浮点数据类型更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的双精度数比浮点数快吗 https stackoverflow com questions 158889 are doubles faster than floats in c 我编写了简单的基
  • 使用 Python(或 R)提取 Google Scholar 结果

    我想使用 python 来抓取谷歌学术搜索结果 我找到了两个不同的脚本来做到这一点 一个是gscholar py https github com venthur gscholar另一个是scholar py 那个可以用作 python 库