【工具】自动搜索Research网站的学术会议排名

news2024/11/19 7:40:18

转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn]

Research.com是一个可以搜索学术会议网站的影响因子的网站。

 

好用是好用,但有一个缺点:得手动选择类目。有这么多类目,一个个手动选也太累了。

所以做了一个自动搜索的小工具,效果如图:

当然也是开源的,放到了这里:GitHub - 1061700625/small_tools_v2: 使用tkinter和Python制作的小工具集,非常方便自己扩展

 

这里也放一波源码,但不一定会常来更新,更新的还是放到上面的github去了:

import requests
from bs4 import BeautifulSoup
from tqdm import tqdm
import threading
import tkinter as tk
import tkinter.messagebox as msgbox
import tkinter.ttk as ttk
import tkinter.simpledialog as simpledialog

def search(keyword):
    filterDisciplines = [
        'animal-science-and-veterinary',
        'biology-and-biochemistry',
        'business-and-management',
        'chemistry',
        'computer-science',
        'earth-science',
        'ecology-and-evolution',
        'economics-and-finance',
        'electronics-and-electrical-engineering',
        'environmental-sciences',
        'genetics-and-molecular-biology',
        'immunology',
        'law-and-political-science',
        'materials-science',
        'mathematics',
        'mechanical-and-aerospace-engineering',
        'medicine',
        'microbiology',
        'neuroscience',
        'physics',
        'plant-science-and-agronomy',
        'psychology',
        'social-sciences-and-humanities',    
    ]

    results = []
    for target in tqdm(filterDisciplines, desc='挨个搜索中...', ncols=60):
        url = 'https://research.com/conference-rankings/' + target

        headers = {
            'Content-Type': 'application/json',
            'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.82',
        }
        data = {"searchQuery": keyword}
        soup = BeautifulSoup(requests.post(url, json=data, headers=headers).text, 'lxml')
        
        conference_items = soup.find_all('div', class_='conference-item')
        if not conference_items:
            continue
        
        for item in conference_items:    
            rank = item.find(class_='position').getText().replace('Rank', '').strip()
            score = item.find(class_='rankings-info').getText().strip()
            url = item.find('a').get('href').strip()
            title = item.find('a').getText().strip()
            results.append((rank, title, score, url))
        break

    print('排名\t名称\t\t影响因子\t链接')
    for rank, title, score, url in results:
        print(f'{rank}\t{title}\t{score}\t{url}')

    return results


def on_button_click():
    processing = False
    def perform_search(keyword):
        nonlocal processing
        processing = True
        button.config(text="搜索中...", state=tk.DISABLED)
        
        # Clear the output list before performing the search
        output_listbox.delete(*output_listbox.get_children())

        if keyword is not None and len(keyword.strip()) > 0:
            keyword = keyword.strip()
            for rank, title, score, url in search(keyword):
                output_listbox.insert("", "end", values=(rank, title, score, url))
        processing = False
        button.config(text="开始搜索", state=tk.NORMAL)
    
    if not processing:
        keyword = input_entry.get()
        if not keyword.strip():
            msgbox.showinfo("Warning", "请先输入搜索词")
        else:
            t = threading.Thread(target=perform_search, args=[keyword,], daemon=True)
            t.start()

def on_treeview_double_click(event):
    item = output_listbox.selection()
    if item:
        selected_item = output_listbox.item(item, "values")
        if selected_item:
            link = selected_item[3]
            root.clipboard_clear()
            root.clipboard_append(link)
            msgbox.showinfo("Copy", f"Link copied: {link}")


# 粗糙版本,请勿模仿
root = None
output_listbox = None
input_entry = None
button = None
def process():
    global root, output_listbox, input_entry, button
    root = tk.Tk()
    root.title("Research-er")
    # Calculate the center position of the screen
    window_width = 400
    window_height = 300
    screen_width = root.winfo_screenwidth()
    screen_height = root.winfo_screenheight()
    x_position = (screen_width - window_width) // 2
    y_position = (screen_height - window_height) // 2
    root.geometry(f"{window_width}x{window_height}+{x_position}+{y_position}")


    input_entry = tk.Entry(root)
    input_entry.pack(pady=10)

    button = tk.Button(root, text="开始搜索", command=on_button_click)
    button.pack()

    columns = ("Rank", "Name", "Impact Factor", "Link")
    output_listbox = ttk.Treeview(root, columns=columns, show="headings")
    for col in columns:
        output_listbox.heading(col, text=col)
        output_listbox.column(col, width=100, anchor="center")
    output_listbox.pack(pady=10, fill=tk.BOTH, expand=True)

    # Add horizontal and vertical scrollbars to the output listbox
    h_scrollbar = ttk.Scrollbar(root, orient=tk.HORIZONTAL, command=output_listbox.xview)
    v_scrollbar = ttk.Scrollbar(root, orient=tk.VERTICAL, command=output_listbox.yview)
    output_listbox.configure(xscrollcommand=h_scrollbar.set, yscrollcommand=v_scrollbar.set)
    h_scrollbar.pack(fill=tk.X, side=tk.BOTTOM)
    v_scrollbar.pack(fill=tk.Y, side=tk.RIGHT)

    output_listbox.bind("<Double-Button-1>", on_treeview_double_click)

    root.mainloop()


if __name__ == '__main__':
    process()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/830931.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

图片资源

1.TextureType&#xff1a; Default&#xff1a;默认图片类型 Normal&#xff1a;法向贴图 Editor GUI&#xff1a;编辑器使用的图片 Sprite&#xff1a;精灵格式图片 Cursor&#xff1a;鼠标贴图 Cookie&#xff1a;灯光Cookie贴图 Lightmap&#xff1a;灯光贴图 Single…

aws的EC2云服务器自己操作记录

亚马逊官网有免费试用1年的服务器 以下内容参考 1. 启动生成实例 1.1 创建实例时需要生成 使用的默认的 Debian 和 一个.pem后缀的秘钥 1.2 网上下一个Mobaxterm ,实例名是公有 IPv4 DNS 地址 ,使用SSH连接,登录名是admin 1.3 登录进去后 输入用户名 admin 后进去,sudo …

【赠书活动|第三期《Spring Cloud Alibaba核心技术与实战案例》】

文章目录 特色内容简介作者简介抽奖方式 特色 不留遗漏&#xff1a;全面覆盖Dubbo核心知识点 直击要害&#xff1a;实战化案例精准定位技术细节 学以致用&#xff1a;精要式演示确保开发、学习不脱节 潜移默化&#xff1a;研磨式知识讲解渗透技术要点 提升效率&#xff1a;垂直…

W5100S-EVB-PICO做DNS Client进行域名解析

前言 在上一章节中我们用W5100S-EVB-PICO通过dhcp获取ip地址&#xff08;网关&#xff0c;子网掩码&#xff0c;dns服务器&#xff09;等信息&#xff0c;给我们的开发板配置网络信息&#xff0c;成功的接入网络中&#xff0c;那么本章将教大家如何让我们的开发板进行DNS域名解…

【网络安全带你练爬虫-100练】第16练:使用session发送请求

目录 一、目标1&#xff1a;使用seesion进去请求 二、网络安全O 一、目标1&#xff1a;使用seesion进去请求 &#xff08;1&#xff09;应用&#xff1a; 通过创建会话&#xff08;session&#xff09;对象来请求并爬取返回的数据包 情景&#xff1a;需要登录才能爬取的网…

深度学习Redis(4):哨兵

前言 在 Redis&#xff08;3&#xff09;&#xff1a;主从复制 中曾提到&#xff0c;Redis主从复制的作用有数据热备、负载均衡、故障恢复等&#xff1b;但主从复制存在的一个问题是故障恢复无法自动化。本文将要介绍的哨兵&#xff0c;它基于Redis主从复制&#xff0c;主要作…

HET-1型多功能二维材料转移平台

HET-1型多功能二维材料转移平台 产品介绍 HET-1型二维转移平台适用于石墨烯、各类过渡金属化合物、黑磷等多种单层及其多层二维材料的精确定位转移及范德瓦尔斯异质结的准确制备&#xff0c;实现了低维材料转移的精确可视化操作。本套转移平台由转移台模块、样品台模块、显微观…

高性能API设计

背景 设计出一个高性能的API&#xff0c;需要综合网络、业务、数据库的优化。一下是我在实际的开发过程中总结的优化思想和一些效率提升的技巧。 批量思想 很多的数据库操作都含有batch或者bulk的api&#xff0c;如我最近常使用的mybatis、mybatis plus以及elastic Search的…

怎么让表格中的一行数据 转置 为一列数据 (WPS )

例如 我现在有一列数据 我想要 变成一行 数据 1.首先选中想要转置的数据&#xff0c;然后control C 2.接着 点击你想放置数据的位置 右键 其实 关键是 找到 选择性复制 3. 找到转置&#xff0c;勾选 最后 确定 反之亦然

GD32F103VET输出PWM波形

GD32F103VET将TIMER0_CH3映射到PE14引脚&#xff0c;使其输出PWM波形。测试时&#xff0c;使用示波器看PE14引脚输出的波形&#xff0c;效果更直观。 TIMER0之PWM输出引脚映射如下: TIMER0_REMAP[1:0]"00"(没有映射): TIMER0_CH0默认被映射到PA8引脚 TIMER0_CH1默认…

计算机网络 深入理解HTTPS协议证书

文章目录 一、HTTPS协议二、对称加密三、非对称加密&对称加密(混合加密)三、加密证书四、HTTPS双刃性 一、HTTPS协议 之前介绍了HTTP协议&#xff0c;它给我们带来很大便利&#xff0c;但是也能看到他的不足。由于其本身通信使用明文&#xff0c;没有进行加密&#xff0c;…

MATLAB /Simulink 快速开发STM32(使用st官方工具 STM32-MAT/TARGET),以及开发过程

配置好环境以后就是开发&#xff1a; stm32cube配置芯片&#xff0c;打开matlab添加ioc文件&#xff0c;写处理逻辑&#xff0c;生成代码&#xff0c;下载到板子中去。 配置需要注意事项&#xff1a; STM32CUBEMAX6.5.0 MABLAB2022BkeilV5.2 Matlab生成的代码CTRLB 其中关键的…

Apache RocketMQ 命令注入

漏洞简介 RocketMQ 5.1.0及以下版本&#xff0c;在一定条件下&#xff0c;存在远程命令执行风险。RocketMQ的NameServer、Broker、Controller等多个组件外网泄露&#xff0c;缺乏权限验证&#xff0c;攻击者可以利用该漏洞利用更新配置功能以RocketMQ运行的系统用户身份执行命令…

java+springboot+mysql个人日记管理系统

项目介绍&#xff1a; 使用javaspringbootmysql开发的个人日记管理系统&#xff0c;系统包含超级管理员、管理员、用户角色&#xff0c;功能如下&#xff1a; 超级管理员&#xff1a;管理员管理&#xff1b;用户管理&#xff1b;反馈管理&#xff1b;系统公告&#xff1b;个人…

银河麒麟V10 wireshark安装说明(断网离线)

下载离线安装包 链接&#xff1a;https://pan.baidu.com/s/11QFRmCGlIJrJaiKcHh9Hag?pwdu9wv 提取码&#xff1a;u9wv 安装步骤 tar zxvf wireshark.tar.gz cd wireshark sudo dpkt -i *.deb wireshark

关于CORS的笔记

CORS目录 一、SpringBoot 跨域设置二、CORS&#xff08;1&#xff09;总结的图如下&#xff08;2&#xff09;简单请求满足的条件&#xff08;3&#xff09;响应头&#xff08;4&#xff09;请求头&#xff08;5&#xff09;使用XMLHttpRequest进行跨域访问1. Access-Control-A…

html学习9(脚本)

1、<script>标签用于定义客户端脚本&#xff0c;比如JavaScript&#xff0c;既可包含脚本语句&#xff0c;也可通过src属性指向外部文件。 2、JavaScript最常用于图片操作、表单验证及内容动图更新。 3、<noscript>标签用于在浏览器禁用脚本或浏览器不支持脚本&a…

Java课题笔记~ 关联映射

一、MyBatis关联查询 在关系型数据库中&#xff0c;表与表之间存在着3种关联映射关系&#xff0c;分别为一对一、一对多、多对多。 一对一&#xff1a;一个数据表中的一条记录最多可以与另一个数据表中的一条记录相关。列如学生与学号就属于一对一关系。 一对多&#xff1a;主…

学习gRPC (三)

测试gRPC例子 编写proto文件实现服务端代码实现客户端代码 通过gRPC 已经编译并且安装好之后&#xff0c;就可以在源码目录下找到example 文件夹下来试用gRPC 提供的例子。 在这里我使用VS2022来打开仓库目录下example/cpp/helloworld目录 编写proto文件 下面是我改写的exa…

领域驱动设计(六) - 架构设计浅谈

单用一篇文章很难把这个主题描述的清楚&#xff0c;但为了系列的完整性&#xff0c;笔者会围绕DDD中所介绍的内容做下初步总结&#xff0c;使读者有一个连续性。 一、概述 现在不是局部解决问题的时代了要运用新的技术创造新的效率提升&#xff0c;需要整个商业链条一起前进。…