使用Beautiful Soup抓取网页标题遇AttributeError问题求助
解决Beautiful Soup抓取职位标题的AttributeError问题
错误原因
你遇到的AttributeError: 'NoneType' object has no attribute 'text',是因为部分<li class="search-result__advert">节点中找不到带有link类的<a>标签,i.find("a",class_="link")返回None后调用.text触发报错。
正确代码实现
通过更精准的选择器直接定位蓝色标题元素,同时保证代码健壮性,示例如下:
from bs4 import BeautifulSoup import requests url = "https://www.prace.cz/hledat/?searchForm%5Blocality_codes%5D=&searchForm%5Bprofs%5D=&searchForm%5Bother%5D=Angli%C4%8Dtina&searchForm%5Bemployment_type_codes%5D%5B%5D=201300001&searchForm%5Bemployment_type_codes%5D%5B%5D=201300002&searchForm%5Bemployment_type_codes%5D%5B%5D=201300004&searchForm%5Bminimal_salary%5D=&searchForm%5Beducation%5D=&searchForm%5Bsuitable_for%5D=&searchForm%5Bsearch%5D=" web = requests.get(url) soup = BeautifulSoup(web.content, "html.parser") # 用CSS选择器直接定位所有蓝色标题的a标签 title_elements = soup.select("li.search-result__advert h3.search-result__title a") # 提取标题文本并整理为列表 job_titles = [elem.get_text(strip=True) for elem in title_elements] # 输出结果 for title in job_titles: print(title)
补充说明
- 使用
soup.select()结合CSS选择器,能精准定位到目标标题元素,避免无效节点的干扰; get_text(strip=True)可自动去除文本前后的空白字符,让结果更整洁;- 如果担心仍有无效节点,可增加非空判断:
job_titles = [] for elem in title_elements: if elem: job_titles.append(elem.get_text(strip=True))
内容的提问来源于stack exchange,提问作者Pavel
相关产品推荐
相关产品推荐

