期刊作者名提取报错:Selenium获取标签并存入列表的正确方法
问题分析与解决方案
错误原因
- 直接用
requests.get()无法获取需机构权限或动态渲染的页面内容,导致BeautifulSoup解析不到目标标签,parent_div返回None,触发AttributeError - BeautifulSoup语法错误:
find_all("a.href")写法错误,正确查找带href属性的a标签应为find_all("a", href=True)
目标标签确认
Tandfonline文章页面中,作者名称的典型标签结构:
- 父容器:
div.NLM_contrib-group或ul.contrib-list - 单个作者元素:
span.NLM_contrib下的a标签(部分页面直接用span标签承载作者名),标签内文本即为作者名称
Selenium 实现代码
from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By import pandas as pd # 初始化Chrome浏览器(需确保chromedriver路径配置正确) driver = webdriver.Chrome() wait = WebDriverWait(driver, 10) url = "https://www.tandfonline.com/doi/full/10.1080/17452759.2022.2111585" driver.get(url) # 等待作者区域加载完成 wait.until(EC.presence_of_element_located((By.CLASS_NAME, "NLM_contrib-group"))) # 提取所有作者元素(根据实际页面结构调整选择器) author_elements = driver.find_elements(By.CSS_SELECTOR, "div.NLM_contrib-group span.NLM_contrib a") # 若页面无a标签,改用:driver.find_elements(By.CSS_SELECTOR, "div.NLM_contrib-group span.NLM_contrib") # 提取作者名并存入列表 author_names = [ele.text.strip() for ele in author_elements if ele.text.strip()] print(author_names) # 写入Excel(示例) output = pd.read_excel("C:\\Users\\97254\\Downloads\\output.xlsx") output["作者"] = author_names output.to_excel("C:\\Users\\97254\\Downloads\\output_updated.xlsx", index=False) # 关闭浏览器 driver.quit()
注意事项
- 若需机构权限,需确保浏览器已登录对应机构账号(可手动登录后保持会话,或用Selenium处理登录流程)
- 若页面结构变动,需通过浏览器开发者工具查看实际标签,调整元素定位方式
- 适当增加等待时间或显式等待,避免因页面加载不完整导致元素查找失败
内容的提问来源于stack exchange,提问作者Ido Kobi
相关产品推荐
相关产品推荐

