首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用BeautifulSoup查找所有包含a和不包含b的标记

使用BeautifulSoup查找所有包含a和不包含b的标记
EN

Stack Overflow用户
提问于 2016-07-21 00:54:20
回答 1查看 1.5K关注 0票数 1

我使用bs4来提取带有js流项类的li标记,但不包含以下滚动凸点用户卡。(只得到a,b)

代码语言:javascript
运行
复制
<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>

我在想两种方法。

  1. 使用soup.find_all('li', class_=re.compile('js-stream-item'))获取所有标签,然后用滚动凸起式用户卡删除标签。
  2. 首先使用[tag.extract() for tag in soup.find_all('li', class_=re.compile('scroll-bump-user-card'))]删除,然后再查找所有内容。

问题是,如果通过编辑re.compile()中的正则表达式(而不是语法)来获得a,b的话,是否有一个不错的方法。

Update I将alecxe的答案的第一个选项重写为一行,如下所示:

代码语言:javascript
运行
复制
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')
EN

回答 1

Stack Overflow用户

发布于 2016-07-21 01:51:27

首先,class是一个特殊的多值属性,它需要特殊处理

一种选择是使用搜索函数并检查是否存在js-stream-item类和没有scroll-bump-user-card类:

代码语言:javascript
运行
复制
def search_function(tag):
    if tag.name == "li":
        class_ = tag.get("class", [])
        return "js-stream-item" in class_ and "scroll-bump-user-card" not in class_

for li in soup.find_all(search_function):
    print(li.get_text(strip=True))

另一种选择是查找所有lijs-stream-item类,并跳过具有scroll-bump-user-card类的li元素:

代码语言:javascript
运行
复制
for li in soup.select("li.js-stream-item"):
    if "scroll-bump-user-card" in li["class"]:
        continue
    print(li.get_text(strip=True))

另一种方法是检查class是否以stream-item结尾,并使用CSS选择器 (不要使用这个):

代码语言:javascript
运行
复制
for li in soup.select("li[class$=' stream-item ']"):
    print(li.get_text(strip=True))

请注意,用于此用例的一个更好的CSS选择器是:

代码语言:javascript
运行
复制
li.js-stream-item:not(.scroll-bump-user-card)

但是,由于BeautifulSoup中对CSS选择器的支持有限,它将无法工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38493154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档