Python Requests爬取页面时BeautifulSoup查找元素返回None
问题根源
两个核心错误导致拿不到目标元素:
- BeautifulSoup参数使用错误:BS4仅在匹配
class属性时,因class是Python保留关键字需要使用class_传参,匹配id属性直接用id参数即可。原代码写的id_="most-recorded"是在查找带id_属性的标签,永远匹配不到目标span。 - 请求被网站反爬机制拦截:requests默认的请求头
User-Agent带有python-requests标识,网站识别到爬虫特征后不会返回正常页面内容,返回的响应体里本身就不存在目标元素。
修复代码
给请求添加普通浏览器的User-Agent模拟真实访问,同时修正find方法的参数即可:
from bs4 import BeautifulSoup import requests url = "https://www.gamerdvr.com/gamer/cookz/videos" # 模拟Chrome浏览器的请求头 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36" } response = requests.get(url, headers=headers) soup = BeautifulSoup(response.content, 'html.parser') # 修正id参数,去掉多余的下划线 element = soup.find('span', id="most-recorded") print(element)
排查小提示
后续再遇到元素查找返回None的情况,先打印response.text核对返回内容是否和浏览器看到的页面一致,先排除反爬、内容动态加载的问题,再检查标签匹配的属性、参数是否书写正确。
内容的提问来源于stack exchange,提问作者Caio
相关产品推荐
相关产品推荐

