casoa_journal.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
中科院 OA 期刊信息获取脚本
"""

import argparse
import requests
from bs4 import BeautifulSoup

def get_journal_info(journal_name):
    """
    获取期刊详细信息
    
    Args:
        journal_name: 期刊名称(如 "中国科学: 信息科学")
        
    Returns:
        期刊详细信息
    """
    # 构建搜索 URL
    search_url = "https://www.oaj.cas.cn/journals/search"
    params = {
        "q": journal_name
    }
    
    try:
        # 首先搜索期刊
        response = requests.get(search_url, params=params)
        response.raise_for_status()
        
        soup = BeautifulSoup(response.text, 'html.parser')
        
        # 查找期刊链接
        journal_link = None
        journal_items = soup.find_all('div', class_='journal-item')
        
        for item in journal_items:
            title_elem = item.find('h3', class_='journal-title')
            if title_elem and journal_name in title_elem.text:
                link_elem = item.find('a', href=True)
                if link_elem:
                    journal_link = f"https://www.oaj.cas.cn{link_elem['href']}"
                    break
        
        if not journal_link:
            print("未找到匹配的期刊")
            return None
        
        # 获取期刊详细页面
        response = requests.get(journal_link)
        response.raise_for_status()
        
        soup = BeautifulSoup(response.text, 'html.parser')
        
        # 提取期刊名称
        title_elem = soup.find('h1', class_='journal-title')
        title = title_elem.text.strip() if title_elem else "No title"
        
        # 提取期刊描述
        desc_elem = soup.find('div', class_='journal-description')
        description = desc_elem.text.strip() if desc_elem else "No description"
        
        # 提取影响因子
        impact_elem = soup.find('div', class_='impact-factor')
        impact_factor = impact_elem.text.strip() if impact_elem else "No impact factor"
        
        # 提取主编信息
        editor_elem = soup.find('div', class_='editor-in-chief')
        editor = editor_elem.text.strip() if editor_elem else "No editor info"
        
        return {
            "name": title,
            "description": description,
            "impact_factor": impact_factor,
            "editor_in_chief": editor,
            "home_link": journal_link,
            "url": journal_link
        }
        
    except requests.exceptions.RequestException as e:
        print(f"获取期刊信息失败: {e}")
        return None

def main():
    parser = argparse.ArgumentParser(description="获取中科院 OA 期刊详细信息")
    parser.add_argument("journal", help="期刊名称(如 '中国科学: 信息科学')")
    
    args = parser.parse_args()
    
    print(f"获取期刊信息: {args.journal}")
    
    info = get_journal_info(args.journal)
    
    if info:
        print(f"\n期刊名称: {info['name']}")
        print(f"\n期刊描述:\n{info['description']}")
        print(f"\n影响因子: {info['impact_factor']}")
        print(f"\n主编: {info['editor_in_chief']}")
        print(f"\n主页链接: {info['home_link']}")
        print(f"\n期刊页面: {info['url']}")
    else:
        print("未能获取期刊详细信息")

if __name__ == "__main__":
    main()