
本文详解如何解决网络爬虫中作者列表被省略号截断的问题,通过分析html源码结构,改用更精准的选择器(如class或meta标签)来完整获取所有作者姓名。
本文详解如何解决网络爬虫中作者列表被省略号截断的问题,通过分析html源码结构,改用更精准的选择器(如class或meta标签)来完整获取所有作者姓名。
在使用 BeautifulSoup 从学术出版平台(如 Hindawi)抓取论文作者时,若直接依赖 标签,极易遭遇数据截断问题——例如输出为 "Datian Bi | Jingyuan Kong | ... | Junli Yang"。这是因为该 meta 标签本身在网页源码中就仅包含经前端简化处理后的摘要式内容(含省略号),并非真实全量作者数据。
要可靠获取全部作者,需转向页面中承载原始作者信息的语义化结构元素。以目标 URL https://www.hindawi.com/journals/jhe/2021/2122095/ 为例,其作者信息实际分布在两类高可信度位置:
- 作者姓名 DOM 节点:带有 class="articleHeader__authors_author" 的 标签,每个 span 包含一位作者的姓名及隶属编号(如 'Datian Bi,1');
- 标准引用元数据:多个 标签(遵循 Citation Metadata Standard),每项 content 值格式统一为 "Last, First"(如 'Bi, Datian'),更适合后续结构化处理。
✅ 推荐实践代码如下(含清洗与去重):
import requests
from bs4 import BeautifulSoup
url = 'https://doi.org/10.1155/2021/2122095'
response = requests.get(url)
response.raise_for_status() # 确保请求成功
soup = BeautifulSoup(response.content, 'html.parser')
# 方案一:提取 articleHeader__authors_author span 文本(保留原始格式)
author_spans = soup.find_all("span", {"class": "articleHeader__authors_author"})
raw_authors = [span.get_text(strip=True) for span in author_spans]
print("原始作者列表(含序号):", raw_authors)
# 输出: ['Datian Bi,1', 'Jingyuan Kong,1', 'Xue Zhang,1', 'and Junli Yang2']
# 方案二:提取 citation_author meta 标签(标准化格式,推荐用于分析)
citation_authors = [meta['content'] for meta in soup.find_all('meta', {'name': 'citation_author'})]
print("标准引用格式作者:", citation_authors)
# 输出: ['Bi, Datian', 'Kong, Jingyuan', 'Zhang, Xue', 'Yang, Junli']
# ✨ 进阶:清洗并生成规范姓名列表(姓在前 → 名在前)
def normalize_author(full_name: str) -> str:
if ', ' in full_name:
last, first = full_name.split(', ', 1)
return f"{first.strip()} {last.strip()}"
return full_name.strip().replace('and ', '')
normalized = [normalize_author(a) for a in citation_authors]
print("规范化姓名(名 姓):", normalized)
# 输出: ['Datian Bi', 'Jingyuan Kong', 'Xue Zhang', 'Junli Yang']
⚠️ 注意事项:
- 避免硬编码等待:Hindawi 页面可能动态加载,若 soup.find_all 返回空列表,请检查是否需使用 Selenium 或确认响应内容已完整加载;
- User-Agent 必须设置:部分学术站点会拦截无头请求,建议在 requests.get() 中添加 headers(如 'User-Agent': 'Mozilla/5.0...');
- 遵守 robots.txt 与服务条款:批量抓取前请查阅目标网站的爬虫政策,优先考虑其提供的 API(如 CrossRef DOI API)获取结构化元数据。
总结: 是设计用于 SEO 摘要的简化字段,而非数据源;真正可靠的作者数据始终藏于语义化 HTML 结构或标准引用 meta 标签中。切换选择器、验证源码、结构化清洗——三步即可告别省略号陷阱。










