我使用bs4从js-stream-item类中拉出li标签,但不包含以下的scroll-bump-user-card。 (这是只得到a,b只)使用BeautifulSoup查找所有包含AND NOT NOT的标签b
<li class="js-stream-item stream-item ">a<li>
<li class="js-stream-item stream-item stream-item ">b<li>
<li class="js-stream-item stream-item scroll-bump-user-card ">c<li>
有两种方法我在想。
使用
soup.find_all('li', class_=re.compile('js-stream-item'))
获取所有标签,然后使用scroll-bump-user-card移除标签。使用
[tag.extract() for tag in soup.find_all('li', class_=re.compile('scroll-bump-user-card'))]
先删除,然后查找全部。
问题是如果有一个体面的方式在re.compile()
编辑正则表达式,且不语法来获得A,B。
更新我重新写alecxe的回答的第一个选项为一个单一的长行如下:
所有的soup.find_all(lambda tag: re.compile('js-stream-item').search(str(tag))
and not re.compile('scroll-bump-user-card').search(str(tag))
and tag.name == 'li')
谢谢!我将您的第一个选项重写为我的文章中更新的一行。对此有何建议?我还研究了一些正则表达式,尝试类似^(?!。* scroll-bump)* js-stream-item,但没有运气。你有什么主意吗? – PhantomKidding
@PhantomKidding,我不确定你为什么要在一行中做第一个选项,并修改它来做正则表达式搜索。另外,你有没有看过链接答案中的多值属性意味着什么?您不会将单个字符串作为类 - 它是一个字符串列表 - 每个类都有一个字符串。谢谢。 – alecxe