Python爬取TikTok最新视频报'NoneType'无get属性错误如何解决
报错原因
- 直接原因:
soup.find("a", class_="")没有匹配到任何元素返回None,调用get()方法触发属性错误。原来匹配空类名a标签的逻辑本身就极其不稳定,完全依赖页面临时结构,只要平台更新前端代码就会失效。 - 根本原因:目前TikTok用户主页内容全部为JavaScript动态渲染,直接用requests请求拿到的只有初始空白页面模板,视频相关内容需要浏览器执行JS拉取接口数据后才会渲染,静态解析HTML无法找到对应元素。
解决方案
推荐优先用模拟浏览器的方案,适配成本最低:
第一步:安装依赖
执行命令安装需要的库:pip install selenium webdriver-manager beautifulsoup4
第二步:调整后代码
from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager from bs4 import BeautifulSoup import time # 目标用户主页地址 user_home = "https://www.tiktok.com/@dava_m" # 初始化Chrome浏览器,自动适配驱动版本 driver = webdriver.Chrome(service=Service(ChromeDriverManager().install())) driver.get(user_home) # 等待页面渲染完成,网络差可以适当调大等待时间 time.sleep(3) # 下滑页面触发视频列表加载 driver.execute_script("window.scrollTo(0, 500)") time.sleep(2) # 解析页面内容 soup = BeautifulSoup(driver.page_source, "html.parser") # 当前视频a标签类名为e1cg0wnj1,后续如果平台改了类名自行F12查看更新即可 latest_video_tag = soup.find("a", class_="e1cg0wnj1") if latest_video_tag: print("最新视频链接:", latest_video_tag.get("href")) else: print("未匹配到视频元素,可检查类名是否更新") # 关闭浏览器 driver.quit()
补充说明
如果不想启动浏览器,可以直接抓TikTok公开的用户视频接口,接口返回JSON格式,直接提取第一条视频链接即可,性能更高,但需要处理请求头和接口签名校验,适配成本更高。
请求时建议加随机时间间隔,定期更换User-Agent,避免触发反爬限制。
内容的提问来源于stack exchange,提问作者ggindinson
相关产品推荐
相关产品推荐

