Python爬取数据时如何仅筛选以#开头的话题标签排除@内容
过滤Selenium爬取结果中@开头内容的实现方法
你当前的定位逻辑会同时抓到话题标签和@提及的账号,有两种简单的处理方式可以实现只保留#开头的话题标签:
遍历结果时加前缀判断(兼容性最好,适配所有页面场景)
不需要修改原有定位规则,只需要在循环读取标签文本时增加判断逻辑,筛掉非#开头的内容即可,修改后的代码:hashtags = driver.find_elements(By.CSS_SELECTOR, "li > div > div > div._a9zr > div._a9zs > span > a") for tag in hashtags: tag_content = tag.text.strip() # 仅保留#开头的话题标签 if tag_content.startswith("#"): print(tag_content)这种写法不受页面结构、属性变动影响,只要标签文本前缀是#就会保留,稳定性最高。
优化定位规则,从元素抓取阶段过滤(运行效率更高)
你给出的类名是Instagram的前端类名,该平台下话题标签的跳转链接都包含/explore/tags/路径,@账号的链接是用户主页路径,你可以直接在CSS选择器里加href属性匹配,从根源上不抓取@账号元素:# 仅定位跳转到话题页的a标签,不会抓到@提及的账号 hashtags = driver.find_elements(By.CSS_SELECTOR, "li > div > div > div._a9zr > div._a9zs > span > a[href*='/explore/tags/']") for tag in hashtags: print(tag.text)注意这种写法和平台强绑定,如果后续平台调整了话题页路径规则需要同步修改选择器。
优先推荐第一种写法,不需要依赖平台特定的页面属性,适配性更强,哪怕后续爬取其他平台的话题标签也可以直接复用判断逻辑。
内容的提问来源于stack exchange,提问作者Bobby Wibowo
相关产品推荐
相关产品推荐

