使用BeautifulSoup爬取Internshala时调用find_all取text属性报错如何解决
报错原因
你遇到的报错核心逻辑如下:
Message=ResultSet object has no attribute 'text'. You're probably treating a list of elements like a single element. Did you call find_all() when you meant to call find()?
BeautifulSoup的find_all()方法会返回所有匹配规则的元素组成的列表(官方叫ResultSet对象),列表类型本身没有text属性,只有单个DOM元素对象才支持调用text提取标签内的文本内容。
解决方案
根据你的提取需求,对应两种修改方式:
1. 只需要提取第一个匹配的公司名称
把当前报错行的find_all替换为find即可,find方法只会返回第一个匹配到的单个元素:
# 替换报错的那一行代码 company_name = soup.find('div', class_="heading_4_5 profile").text.strip() print(company_name)
末尾加的strip()方法可以去掉文本前后多余的空格、换行符。
2. 需要提取页面所有的公司名称
遍历find_all返回的元素列表,逐个提取每个元素的文本:
# 替换原来的company_name赋值和打印逻辑 company_elements = soup.find_all('div', class_="heading_4_5 profile") for ele in company_elements: print(ele.text.strip())
可选优化写法
你之前已经抓取了岗位列表容器jobs,更稳妥的逻辑是先遍历每个独立的岗位容器,再在单个岗位内部提取对应信息,避免跨岗位匹配到错误内容:
jobs = soup.find_all('div', class_="internship_list_container") for job in jobs: company_name = job.find('div', class_="heading_4_5 profile").text.strip() print(company_name)
内容的提问来源于stack exchange,提问作者Shyamansh Sharma
相关产品推荐
相关产品推荐

