Python中for循环处理bs4.element.tag提取a标签致循环中断如何解决
错误原因
报错的核心是部分job节点下不存在class="mat"的span标签,job.find('span', class_ = 'mat')会返回None,对None调用.a属性就会抛出AttributeError导致循环中断。
解决方案
方法1:提前逐层非空判断(兼容性最强)
访问子属性前先判断上层节点是否存在,缺失对应节点的条目可以直接跳过或者输出默认值,不会中断循环:
for job in jobs: mat_span = job.find('span', class_ = 'mat') # 依次判断span存在、span下有a标签、a标签带href属性 if mat_span and mat_span.a and 'href' in mat_span.a.attrs: related_jobs = 'site' + mat_span.a['href'] print(f"All Postings By {company_name}: {related_jobs}") else: # 无对应节点时可自定义输出,或者直接pass跳过本条 print(f"All Postings By {company_name}: 无相关岗位链接")
方法2:CSS选择器一次性定位(代码更简洁)
用select_one方法直接定位符合要求的a标签,定位不到直接返回None,不需要逐层判空:
for job in jobs: target_a = job.select_one('span.mat a[href]') if target_a: related_jobs = 'site' + target_a['href'] print(f"All Postings By {company_name}: {related_jobs}") else: print(f"All Postings By {company_name}: 无相关岗位链接")
补充说明
不建议用字符串方法提取a标签的href属性,HTML结构的容错性很低,比如标签属性顺序变化、存在多余空格、嵌套其他标签的场景下,字符串切割很容易出错,BeautifulSoup的原生解析方法已经覆盖了这些边界情况,稳定性更高。
内容的提问来源于stack exchange,提问作者hoodie
相关产品推荐
相关产品推荐

