如何编写CSS选择器筛选含指定href且排除特定文本的a标签
筛选href含"crap"但锚文本不含"facebook"的标签
需求明确
要找的<a>标签得同时满足两个条件:
- href属性里必须有子串
crap(不区分大小写) - 锚文本里绝对不能有
facebook(不区分大小写)
示例HTML代码
<p><strong>xxxxx 520dp:</strong> <a class="facebook" href="https://facebook.com/6ZdmW2Cwaq/somecrap1.crap.html">facebook</a> – <a href="https://google.com/view/somecrap2.crap">google</a> – <a href="https://microsoft.net/file/somecrap3.crap.html">microsoft</a></p>
错误尝试的问题
一开始写的选择器 a[href*=crap i] not(a[text*=facebook i]) 有语法错误:
- CSS里的否定逻辑得用伪类
:not(),不能直接写not() - BeautifulSoup不支持
text*=这种文本匹配语法,得用它支持的:contains()
修正后的有效选择器
调整后的选择器结合BeautifulSoup解析就能拿到目标标签:
a[href*=crap i]:not(:contains("facebook"))
针对示例里的相邻结构,也可以用兄弟选择器写法:
a[href*=crap i]~:not(a:contains("facebook"))
最终结果
解析后得到符合要求的标签列表:
[<a href="https://google.com/view/somecrap2.crap">google</a>, <a href="https://microsoft.net/file/somecrap3.crap.html">microsoft</a>]
内容的提问来源于stack exchange,提问作者Ozooha Ozooha
相关产品推荐
相关产品推荐

