从 Google Scholar 搜索结果中抓取和解析引文信息

2023-12-26

我有大约 20000 篇文章标题的列表,我想scrape他们来自谷歌学术的引用计数。我是 BeautifulSoup 库的新手。我有这个代码:

import requests
from bs4 import BeautifulSoup

query = ['Role for migratory wild birds in the global spread of avian 
 influenza H5N8','Uncoupling conformational states from activity in an 
 allosteric enzyme','Technological Analysis of the World’s Earliest 
 Shamanic Costume: A Multi-Scalar, Experimental Study of a Red Deer 
 Headdress from the Early Holocene Site of Star Carr, North Yorkshire, 
 UK','Oxidative potential of PM 2.5  during Atlanta rush hour: 
 Measurements of in-vehicle dithiothreitol (DTT) activity','Primary 
 Prevention of CVD','Growth and Deposition of Au Nanoclusters on Polymer- 
 wrapped Graphene and Their Oxygen Reduction Activity','Relations of 
 Preschoolers Visual-Motor and Object Manipulation Skills With Executive 
 Function and Social Behavior','We Know Who Likes Us, but Not Who Competes 
 Against Us']

url = 'https://scholar.google.com/scholar?q=' + query + '&ie=UTF-8&oe=UTF- 
       8&hl=en&btnG=Search'

content = requests.get(url).text
page = BeautifulSoup(content, 'lxml')
results = []
for entry in page.find_all("h3", attrs={"class": "gs_rt"}):
    results.append({"title": entry.a.text, "url": entry.a['href']})

但它只返回标题和网址。我不知道如何从另一个标签获取引文信息。请帮我一下。


您需要循环该列表。您可以使用 Session 来提高效率。以下是针对 bs 4.7.1 支持的:contains用于查找引用计数的伪类。看起来你可以删除h3从 css 选择器中输入选择器,然后在之前使用 classa i.e. .gs_rt a。如果您没有 4.7.1。您可以使用[title=Cite] + a选择引用计数。

import requests
from bs4 import BeautifulSoup as bs

queries = ['Role for migratory wild birds in the global spread of avian influenza H5N8',
         'Uncoupling conformational states from activity in an allosteric enzyme',
         'Technological Analysis of the World’s Earliest Shamanic Costume: A Multi-Scalar, Experimental Study of a Red Deer Headdress from the Early Holocene Site of Star Carr, North Yorkshire, UK',
         'Oxidative potential of PM 2.5  during Atlanta rush hour: Measurements of in-vehicle dithiothreitol (DTT) activity',
         'Primary Prevention of CVD','Growth and Deposition of Au Nanoclusters on Polymer-wrapped Graphene and Their Oxygen Reduction Activity',
         'Relations of Preschoolers Visual-Motor and Object Manipulation Skills With Executive Function and Social Behavior',
         'We Know Who Likes Us, but Not Who Competes Against Us']

with requests.Session() as s:
    for query in queries:
        url = 'https://scholar.google.com/scholar?q=' + query + '&ie=UTF-8&oe=UTF-8&hl=en&btnG=Search'
        r = s.get(url)
        soup = bs(r.content, 'lxml') # or 'html.parser'
        title = soup.select_one('h3.gs_rt a').text if soup.select_one('h3.gs_rt a') is not None else 'No title'
        link = soup.select_one('h3.gs_rt a')['href'] if title != 'No title' else 'No link'
        citations = soup.select_one('a:contains("Cited by")').text if soup.select_one('a:contains("Cited by")') is not None else 'No citation count'
        print(title, link, citations) 
with requests.Session() as s:
    for query in queries:
        url = 'https://scholar.google.com/scholar?q=' + query + '&ie=UTF-8&oe=UTF-8&hl=en&btnG=Search'
        r = s.get(url)
        soup = bs(r.content, 'lxml') # or 'html.parser'
        title = soup.select_one('.gs_rt a')
        if title is None:
            title = 'No title'
            link = 'No link'
        else:  
            link = title['href']
            title = title.text
        citations = soup.select_one('[title=Cite] + a')
        if citations is None:
            citations = 'No citation count'
        else:
             citations = citations.text
        print(title, link, citations)

感谢@facelessuser 的评论,底层版本被重新编写。留下的顶级版本进行比较:

在单行 if 语句中不要调用 select_one 两次可能会更有效。当模式构建被缓存时,返回的标签不会被缓存。我个人会将变量设置为 select_one 返回的任何内容,然后,仅当变量为 None 时,将其更改为 No link 或 No title 等。它不是那么紧凑,但会更有效

[...]始终检查 if tag 是否为 None: 而不仅仅是 if tag:。对于选择器来说,这并不是什么大问题,因为它们只会返回标签,但如果你曾经做过类似 for x in tag.descendants 的事情:你会得到文本节点(字符串)和标签,并且空字符串将评估为 false,即使它是一个有效的节点。在这种情况下,检查 None 是最安全的

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

从 Google Scholar 搜索结果中抓取和解析引文信息 的相关文章

  • virtualenvwrapper 函数在 shell 脚本中不可用

    所以 我再一次制作了一个很棒的 python 程序 它让我的生活变得更加轻松 并节省了大量时间 当然 这涉及到一个 virtualenv 用mkvirtualenvvirtualenvwrapper 的功能 该项目有一个requiremen
  • pandas read_csv 之前预处理数据文件

    我使用 SAP 的数据输出 但它既不是 CSV 因为它不引用包含其分隔符的字符串 也不是固定宽度 因为它具有多字节字符 它是一种 固定宽度 字符 为了将其放入 pandas 我当前读取文件 获取分隔符位置 对分隔符周围的每一行进行切片 然后
  • caffe安装:opencv libpng16.so.16链接问题

    我正在尝试在 Ubuntu 14 04 机器上使用 python 接口编译 caffe 我已经安装了 Anaconda 和 opencvconda install opencv 我还安装了咖啡中规定的所有要求 并更改了注释块makefile
  • 获取字符串模板中所有标识符列表的函数(Python)

    对于标准库string template在Python中 有没有一个函数可以获取所有标识符的列表 例如 使用以下 xml 文件
  • 在多核上运行 python 线程

    我知道Python 2 7不允许在不同的内核上运行多个线程 你需要使用multiprocessing模块以实现某种程度的并发性 我正在看concurrent futuresPython 3 4 中的模块 是否使用ThreadPoolExec
  • ImproperlyConfigured at / 不允许空静态前缀 - Django

    我正在使用 Django 上传 显示图像 该网站部署在 Heroku 上 下列的this https coderwall com p bz0sng教程我能够成功上传图像 但是 图像并未显示在模板中 然后我了解到我的 urls py 末尾应该
  • 使用 Python-VLC 的 PyInstaller:无属性“media_player_new”错误

    我使用 Python VLC 创建视频播放器 并使用 PyInstaller 在 Windows 10 计算机上生成可执行文件 最初 它给了我错误 Import Error Failed to load dynlib dll libvlc
  • 机器学习的周期性数据(例如度角 -> 179 与 -179 相差 2)

    我使用 Python 进行核密度估计 并使用高斯混合模型对多维数据样本的可能性进行排名 每一条数据都是一个角度 我不确定如何处理机器学习的角度数据的周期性 首先 我通过添加 360 来删除所有负角 因此所有负角都变成了正角 179 变成了
  • Kivy TextInput 水平和垂直对齐(文本居中)

    如何在 Kivy 的 TextInput 中水平居中文本 I have the following screen But I want to centralize my text like this 这是我的 kv 语言的一部分 BoxLa
  • Django 1.7:如何使用 html/css 文件作为模板发送电子邮件

    从 Django 1 7 开始 可以send email 使用新参数 html message 不幸的是 没有关于如何使用它的全面指南 新手友好 或者至少我找不到它 我需要使发送的电子邮件变得漂亮 因此 我试图弄清楚如何将我的消息包含到 h
  • Python GTK3 Treeview 向上或向下移动选择

    如何在树视图中向上或向下移动所选内容 我的想法是 我可以使用向上和向下按钮将选择向上移动一行或向下移动一行 我的 Treeview 使用 ListStore 不确定这是否重要 首先 我将使用我熟悉的 C 代码 如果您在将其翻译为 Pytho
  • 为什么我无法杀死 k8s pod 中的 python 进程?

    我试图杀死一个 python 进程 ps aux grep python root 1 12 6 2 1 2234740 1332316 Ssl 20 04 19 36 usr bin python3 batch run py root 4
  • 在Python中随机交错2个数组

    假设我有两个数组 a 1 2 3 4 b 5 6 7 8 9 我想将这两个数组交错为变量 c 注意 a 和 b 不一定具有相同的长度 但我不希望它们以确定性的方式交错 简而言之 仅仅压缩这两个数组是不够的 我不想要 c 1 5 2 6 3
  • 如何将 django ModelForm 字段显示为不可编辑

    接受我的初步教训django ModelForm 我想让用户能够编辑博客中的条目 BlogEntry has a date postedTime title and content 我想向用户展示一个编辑表单 其中显示所有这些字段 但仅包含
  • 为什么我会在 Python 字符串格式中使用除 %r 之外的其他内容?

    我偶尔会使用 Python 字符串格式 这可以像这样完成 print int i Float f String s 54 34 434 some text 但是 这也可以这样做 print int r Float r String r 54
  • 本地主机上的 Google App Engine GQL 查询

    我正在 Google App Engine Windows 上的 SDK 版本 1 7 0 上开发一个应用程序 我需要经常测试该应用程序 并且此测试涉及数据存储上的大量 GQL 查询 您可以在 App Engine 管理界面的浏览器中在线运
  • 如何将Python包从旧版本安装到新版本?

    我正在使用 python 3 7 最近在 Linux 中安装了 python 3 8 是否有任何 bash 命令或脚本可以获取 3 7 的所有软件包列表并在 3 8 版本中一一安装 我想避免每个包裹都手工完成 注意 我将它们安装在我的系统中
  • 带 Qt 的菜单栏/系统托盘应用程序

    我是 Qt PyQt 的新手 我正在尝试制作一个应用程序 其功能将从菜单栏 系统托盘执行 这里展示了一个完美的例子 我找不到关于如何做到这一点的好资源 有人可以建议吗 Thanks 我认为您正在寻找与QMenu and QMainWindo
  • JSONDecodeError:额外数据:Python [重复]

    这个问题在这里已经有答案了 我使用以下代码从文件加载 json file file name obj list with open file as f for json obj in f obj list append loads json
  • 将函数按元素应用于两个 DataFrame

    如何应用函数z ij f x ij y ij 来自数据框X and Y相同大小并将结果保存到 DataFrameZ 这取决于你有什么样的功能 很多功能已经被矢量化为数据框 例如 等等 所以对于这些功能 你可以简单地做Z X Y or Z X

随机推荐

  • 在 Pandas 中使用 ELIF 创建列

    Question 我无法弄清楚如何根据其他两列中的值创建新的 DataFrame 列 我需要使用 if elif else 逻辑 但我找到的所有文档和示例都只显示 if else 逻辑 这是我正在尝试做的事情的示例 Code df comb
  • TSQL - 选择插入的行

    有没有办法选择插入的行 我正在尝试使用运行以下查询SqlCommand 它用于在数据库中保留给定的id INSERT INTO tbl id SELECT COUNT 1 AS id from tbl 有没有办法返回插入的 id 列 以便我
  • 需要 sigsuspend 的解释

    我需要对 sigsuspend 主题进行澄清 我有一个简化的例子 sigset t mask oldmask sigemptyset mask sigaddset mask SIGRTMIN 1 sigprocmask SIG BLOCK
  • 如何恢复/重新创建 mysql 的默认“mysql”数据库

    当我安装mysql时 它附带了两个数据库 mysql和信息模式 我不小心删除了mysql数据库 有什么办法可以重新创建它吗 另外 由于它包含一个包含用户信息的表 是否有什么方法可以在没有它的情况下查看用户信息 如果您仍然能够登录 我假设您不
  • Facebook API 错误子代码 33

    我有一个应用程序可以获取leads当潜在客户填写表单时 在 webhook 请求后来自 facebook 某些页面抛出此错误 error message Unsupported get request Object with ID 2333
  • 通过react获取cookie

    我需要知道我的用户是否已连接 为此 我想读取我在服务器端使用express session设置的cookie app use session secret crypted key resave false saveUninitialized
  • 为什么用分号连接多个 MySQL 查询不能与 Perl DBI 一起使用?

    我想使用将值插入到两个单独的 MySQL 表中DBI https metacpan org pod DBI 我尝试将两个工作结合起来INSERT通过插入一个来查询 它们之间 dbh gt do q INSERT INTO testA tes
  • 在 docker 中运行 npm update,而不使用该特定更新的缓存

    背景 我正在编写代码node js using npm and docker 我试图让我的 docker 文件在构建时使用缓存 这样就不会花费太长时间 我们有一个 通用 存储库 用于保存在各种存储库中使用的逻辑 并且通过 npm 包进行传播
  • 使用 OpenMP 并行化 while 循环

    我有一个非常大的数据文件 这个数据文件中的每条记录有4行 我编写了一个非常简单的 C 程序来分析这种类型的文件并打印出一些有用的信息 该程序的基本思想是这样的 int main char buffer BUFFER SIZE while f
  • JPA onetoMany/ManytoOne 持续存在 - 违反完整性约束 - 找不到父键

    我的映射文件 相关数据 Parent Entity Table name ATTRIBUTE NAME uniqueConstraints UniqueConstraint columnNames NAME TEXT SequenceGen
  • 使用 Laravel Passport oauth/token 发送更多数据

    所以 我正在使用 Laravel Passport 到目前为止一切正常 但是 我想对护照代码进行一些小的更改 好吧 我希望不在供应商文件夹中 一旦我会要求用户更改其密码 以防他正在进行第一次登录 所以 我需要的是两件事 我相信 1 如何在
  • mysql 查询优化

    我的 x 表中有大约 总共 1 049 906 个 查询花费了 0 0005 秒 如果我只是检索尝试检索特定字段记录 花了不到6分钟 这是我的查询 SELECT CUSTOMER CODE FROM X TBL 客户代码 gt 唯一 上述查
  • 如何配置 Express 响应对象以自动向 JSON 添加属性?

    我有一个对象 var obj stuff stuff 在 Express 中 我将其发送给客户端 如下所示 res json obj 有没有办法配置响应对象自动将属性添加到它生成的 json 中 例如 输出 status ok data s
  • PHP 无需 cURL 即可获取 http 标头响应代码

    我编写了一个类来检测 cURL 是否可用 如果可用 则使用 cURL 执行 GET POST DELETE 在我使用的 cURL 版本中curl getinfo curl CURLINFO HTTP CODE 获取 HTTP 代码 如果 c
  • 监控传出互联网流量

    有没有办法以编程方式监控互联网流量 我想记录用户在互联网上访问的页面 这可以通过 NET 代码实现吗 是否有可用于检索数据的第 3 方 NET 组件 有关互联网流量的信息必须存储到数据库中 因此我无法使用 IE 的插件或其他东西 我们还希望
  • Python 3:从元组列表中删除空元组

    我有一个元组列表 内容如下 gt gt gt myList c e ca ea d do dog ear eat cat car dogs cars done eats cats ears don 我希望它是这样读的 gt gt gt my
  • 标准输出未正确传递?

    特殊的问题 由于某种原因 标准输出中的值无法被正确识别 我想做的是 grep 正在侦听的端口的值并尝试匹配 如果定义的端口存在 即 被监听产生一条消息 如果不存在 则产生另一条消息 name check prometheus status
  • 搜索并替换为 ruby​​ 正则表达式

    我的 MySQL 列中有一个包含 HTML 的文本 blob 字段 我必须更改一些标记 所以我想我会在 ruby 脚本中完成它 Ruby 在这里无关紧要 但很高兴看到它的答案 标记如下所示 h5 foo h5 table tbody tbo
  • 在 C++ 中忽略 std::cin 上的 EOF

    我有一个实现交互式 shell 的应用程序 类似于 Python 控制台 irb 的工作方式 现在的问题是 如果用户不小心点击了 DEOF 已发出 我的getline 调用返回一个空字符串 我将其视为 无输入 并再次显示提示 这会导致打印提
  • 从 Google Scholar 搜索结果中抓取和解析引文信息

    我有大约 20000 篇文章标题的列表 我想scrape他们来自谷歌学术的引用计数 我是 BeautifulSoup 库的新手 我有这个代码 import requests from bs4 import BeautifulSoup que