如何在BeautifulSoup 4中排除指定类的元素进行选择
解决网页抓取时排除特定类后代元素的问题
要排除类为footer-wikiwalk-nav的元素的后代链接,只需修改BeautifulSoup的CSS选择器,用:not()伪类结合后代选择器过滤掉不需要的元素即可。
修改后的代码如下:
url = searchlinks.get() c = requests.get(url) bs = BeautifulSoup(c.content, 'lxml') parent_url = 'https://EXAMPLEURL.com' # 用:not(.footer-wikiwalk-nav *)排除目标类的所有后代链接 surfacelinks = [parent_url + str(l) for l, t in list(set([(a.get('href'), a.get_text()) for a in bs.select('[href*="str"]:not(.footer-wikiwalk-nav *)')])) if 'STR' in t]
关键说明:
- 原选择器
[href*="str"]会匹配所有href属性包含str的<a>标签,包括底部导航里的链接。 - 添加
:not(.footer-wikiwalk-nav *)后,会排除所有属于footer-wikiwalk-nav类元素的后代链接,避免误抓底部导航内容。
内容的提问来源于stack exchange,提问作者MrPigsWorth
相关产品推荐
相关产品推荐

