学术数据采集中的两条路径:结构化提取与交互式解析

本文涉及的产品
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: 在科研信息采集过程中,自动化获取论文元数据(如标题、作者、引用等)已成为刚需。本文以 Scopus 和 CNKI 为例,详解两种主流抓取方式:一是直接解析 HTML 获取浅层数据,二是通过模拟交互提取深层内容,并结合代理服务绕过访问限制,实现高效稳定的数据采集。

爬虫代理

在科研信息服务领域,大家经常需要批量获取论文元数据,比如 标题、作者、期刊、引用关系 等。如果只是人工下载,无论效率还是覆盖度都远远不够。因此,自动化采集就成了必备手段。

不过在实践中,你会发现同一个网站可能需要两种完全不同的处理方式:

  • 有些页面一打开,结构化信息就已经在 HTML 里,可以直接解析。
  • 另一些地方则依赖用户操作或脚本渲染,必须模拟交互才能拿到结果。

本文以 ScopusCNKI(中国知网) 为例,把这两类做法拆开讲清楚。

一、整体框架示意

            ┌──────────────────────────┐
            │   学术数据库 (Scopus / CNKI) │
            └───────────┬──────────────┘
                        │
      ┌─────────────────┴──────────────────┐
      │                                    │
 ┌────▼─────┐                        ┌─────▼─────┐
 │ 路径 A    │                        │ 路径 B    │
 │ HTML解析   │                        │ 模拟交互   │
 └────┬─────┘                        └─────┬─────┘
      │                                    │
   元数据提取                           深层数据获取

二、模块拆解

  1. 路径 A:直接解析 HTML
    • 使用场景:Scopus 搜索结果页,文章标题和作者往往直接写在源码里。
    • 特点:实现简单,抓取速度快。
    • 局限:只能获取“浅层数据”,比如列表信息。
  2. 路径 B:模拟交互获取
    • 使用场景:CNKI 的引文网络、Scopus 的推荐文献。只有在点击或下拉时,前端才会发出异步请求。
    • 特点:能拿到隐藏在交互之后的数据。
    • 局限:性能消耗大,脚本更复杂。
  3. 代理接入
    • 学术站点的访问限制通常比较严格。通过配置 代理服务(如爬虫代理),可以降低被拦截的概率。
  4. 数据存储
    • 抓取结果一般会落地到 MongoDB/MySQL,供后续的数据分析或知识图谱构建使用。

三、示例代码

下面用 Scopus 搜索“deep learning” 的结果做演示。

1. HTML 解析方式

import requests
from bs4 import BeautifulSoup

# ====== 代理配置(亿牛云示例) ======
proxy_host = "proxy.16yun.cn"
proxy_port = "3100"
proxy_user = "16YUN"
proxy_pass = "16IP"

proxies = {
   
    "http": f"http://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}",
    "https": f"http://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}"
}

# ====== 抓取 Scopus 列表页 ======
url = "https://www.scopus.com/results?src=srctitle&q=deep+learning"
headers = {
   "User-Agent": "Mozilla/5.0"}

resp = requests.get(url, headers=headers, proxies=proxies, timeout=10)
soup = BeautifulSoup(resp.text, "html.parser")

papers = []
for item in soup.select(".result-item-content"):
    title = item.select_one("h2").text.strip()
    author = item.select_one(".author").text.strip() if item.select_one(".author") else "未知"
    papers.append({
   "title": title, "author": author})

print(papers)

2. 模拟交互方式

from playwright.sync_api import sync_playwright

# ====== 代理配置(亿牛云示例) ======
proxy_host = "proxy.16yun.cn"
proxy_port = "3100"
proxy_user = "16YUN"
proxy_pass = "16IP"

with sync_playwright() as p:
    browser = p.chromium.launch(
        headless=True,
        proxy={
   
            "server": f"http://{proxy_host}:{proxy_port}",
            "username": proxy_user,
            "password": proxy_pass
        }
    )
    page = browser.new_page()

    page.goto("https://www.scopus.com/results?src=srctitle&q=deep+learning")
    page.wait_for_timeout(5000)

    # 点击展开更多引用信息
    if page.is_visible("text=View all related documents"):
        page.click("text=View all related documents")
        page.wait_for_timeout(3000)

    items = page.query_selector_all(".result-item-content")
    papers = []
    for item in items:
        title = item.query_selector("h2").inner_text()
        author = item.query_selector(".author").inner_text() if item.query_selector(".author") else "未知"
        papers.append({
   "title": title, "author": author})

    print(papers)
    browser.close()

四、流程概览

采集任务启动
       │
       ▼
   [代理模块]
       │
 ┌─────┴─────┐
 │ 路径 A:HTML │ 路径 B:交互
 └─────┬─────┘
       │
       ▼
   数据存储
       │
       ▼
科研分析 / 知识图谱

五、经验总结

  • HTML 解析方式:适合直接拿结果列表,速度快,开销小。
  • 交互解析方式:适合深层数据(如引用网络、推荐文献),但性能代价更大。
  • 混合策略 是实践中常见选择:先批量解析浅层内容,再有选择地调用交互模式,把核心数据补齐。
相关文章
|
弹性计算 Cloud Native 5G
藏经阁2023年书籍推荐
好书一起看,技术干货学习就上藏经阁。藏经阁收录内容涵盖编程语言、云原生、数据库、大数据、AI等热门技术领域,让开发者们享受阅读优质内容。这次为您带来2023年4月至2024年1月的书籍推荐。
1958 5
|
数据采集 供应链 监控
RPA助力企业管理,十大高频场景
rpa在财务、人力资源、客服、供应链管理、市场推广、质量管理、项目管理、数据分析、合规管理和业务流程优化等场景中的应用
【IDEA用法】IDEA新建文件自动加入SVN,删除文件自动从SVN中删除
【IDEA用法】IDEA新建文件自动加入SVN,删除文件自动从SVN中删除
1058 0
|
7月前
|
数据采集 监控 前端开发
n8n-workflows:4300+ 自动化工作流的开源数据中台方案
n8n-workflows 是一个开源低代码工作流模板库,集成4343个模板、365个主流API,助力量化交易数据采集、信号处理与风控监控。支持快速部署与API调用,适用于中低频策略研发,显著降低开发成本,提升效率。
|
10月前
|
存储 缓存 固态存储
什么是OSS加速器?
OSS加速器通过将热点数据缓存至高性能NVMe SSD,提供低延迟、高QPS的数据访问服务,适用于AI模型推理、大数据分析等场景,支持弹性伸缩和多种预热策略,提升数据访问效率。
|
存储 数据可视化 知识图谱
使用Llama index构建多代理 RAG
检索增强生成(RAG)已成为增强大型语言模型(LLM)能力的一种强大技术。通过从知识来源中检索相关信息并将其纳入提示,RAG为LLM提供了有用的上下文,以产生基于事实的输出。
776 0
|
存储 人工智能 安全
AI时代,存力 or 算力 哪个更重要
本文探讨了AI技术发展中算力与存力的重要性。算力指计算能力,对处理大数据和实时计算至关重要;存力则是数据存储能力,确保数据安全可靠,支持后续分析。两者相辅相成,共同推动AI技术的快速发展,缺一不可。
|
存储 人工智能 缓存
官宣开源 阿里云与清华大学共建AI大模型推理项目Mooncake
近日,清华大学和研究组织9#AISoft,联合以阿里云为代表的多家企业和研究机构,正式开源大模型资源池化项目 Mooncake。
|
机器学习/深度学习 人工智能 算法
软件测试中的人工智能:现状与未来
本文探讨了软件测试领域中人工智能的当前应用和未来发展,分析了AI技术在提升测试效率、准确性和自动化方面的潜力。通过实例展示了AI如何帮助发现复杂缺陷,并展望了AI在软件测试中的进一步应用前景。
|
JSON API 数据格式
网易云音乐随机歌曲调用API接口
网易云音乐随机歌曲调用API接口