You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Beautiful Soup提取Airtasker许可证号时出现NoneType错误如何解决

错误原因

  • 你获取到的页面源码不存在你要定位的div.sub-text元素,所以pro.find()返回None,调用text属性自然会抛出空对象属性错误,常见有两类原因:
    1. 许可证号属于JS动态渲染内容,你直接用请求工具拿到的是未渲染的初始静态HTML,没有对应元素
    2. 元素定位规则不准确:sub-text可能是多元素共用的类名、该元素不是div标签、或者类名是拼接的动态值,静态匹配不到

可行解决方案

方案1:先确认静态页面是否包含目标内容

先打印你请求返回的页面源码,搜索许可证号的实际值:

# 假设你用requests发起请求
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"
}
resp = requests.get("你的目标页面URL", headers=headers)
print(resp.text) # 打印后搜索许可证号文本,能搜到就用静态定位,搜不到就用方案2

如果能搜到,说明是定位规则错误,换精准定位方式即可,比如先定位到许可证号的前置标签,再找相邻元素:

# 示例:先找到包含"许可证号"文本的标签,再找下一个同级的sub-text元素
license_label = pro.find(lambda tag: tag.name == "div" and "许可证号" in tag.text)
if license_label:
    license_num = license_label.find_next_sibling("div", class_="sub-text").text.strip()
    license_number.append(license_num)

方案2:动态内容用模拟浏览器加载

如果静态源码搜不到目标内容,说明是JS渲染的,用Selenium等工具等待页面加载完成后再提取:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("你的目标页面URL")
# 等待sub-text元素加载完成,最多等10秒
try:
    license_elem = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, "div.sub-text"))
        # 或者换更精准的选择器,比如限定父级范围的选择器
    )
    license_number.append(license_elem.text.strip())
finally:
    driver.quit()

内容的提问来源于stack exchange,提问作者Meghna Panda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 00:36:04