抓取HTML网页时如何去除所获链接的全部重复项 附代码语法错误修正
代码修正方案
原代码核心错误点
- 语法错误:
startswith是字符串的内置方法,必须用字符串.startswith(匹配内容)的格式调用,且需要先提取到href属性的字符串值再调用该方法 - 取值错误:
links.get没有传入要获取的属性名href,links('href')也不是合法的属性取值写法 - 逻辑错误:不能用
startswith('None')判断空属性,href为空时是None类型,不是字符串'None',直接调用字符串方法会直接报错 - 逻辑冗余:
http和https的判断可以合并,不需要分开写两次
修正后的可用代码
假设你的代码是在遍历所有抓取到的<a>标签的循环中,修正后完整逻辑如下:
uniquelinks = set() # 这里的links_list是你之前抓取到的所有a标签对象组成的列表 for link in links_list: # 先提取href属性值,不存在则为None href = link.get('href') # 跳过空链接、相对路径链接、页内锚点链接 if not href or href.startswith('/') or href.startswith('#'): continue # 仅保留http/https开头的外部链接 if href.startswith(('http', 'https')): print(href) uniquelinks.add(href)
优化说明
- 提前提取
href变量,减少重复调用get方法的开销 - 合并判断条件,简化代码逻辑
- 先做空值判断,避免空值调用字符串方法抛出异常
内容的提问来源于stack exchange,提问作者amilce
相关产品推荐
相关产品推荐

