使用BeautifulSoup查找指定HTML class返回None或空列表如何解决
问题原因及解决方案
核心问题说明
你遇到的空返回问题由两个原因导致:
- 代码缺失
requests库的导入语句,运行会直接报错 - 目标网站有基础反爬机制,未携带浏览器标识的请求会被拦截,返回的页面不存在你要提取的
issue-item类元素,因此BeautifulSoup返回空列表
修复后的可运行代码
import requests from bs4 import BeautifulSoup # 添加请求头模拟普通浏览器访问,绕过基础反爬校验 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" } JAGS7_result = requests.get( "https://agsjournals.onlinelibrary.wiley.com/toc/15325415/2021/69/7", headers=headers ) JAGS7_soup = BeautifulSoup(JAGS7_result.text, "html.parser") results = JAGS7_soup.find_all("div", {"class": "issue-item"}) print(results)
新手通用排查技巧
以后遇到同类提取为空的问题,可以按以下步骤排查:
- 先打印请求返回的状态码
JAGS7_result.status_code,如果返回值不是200,说明请求本身被网站拦截 - 把返回的网页文本保存到本地打开,和你浏览器中打开的目标页面对比,若内容不一致则是触发了反爬,需要补充请求头、Cookie等参数
- 直接在返回的网页文本中搜索你要提取的类名、标签名,如果搜索不到,说明BeautifulSoup不可能找到对应元素,优先解决请求问题
内容的提问来源于stack exchange,提问作者Guun
相关产品推荐
相关产品推荐

