Python BeautifulSoup - 查找类名称以某个字符串开头的所有元素

标签 python html string css-selectors beautifulsoup

假设我们想要找到所有类名都以已知字符串开头并以任意 id 数字结尾的 li 元素。

这意味着这种方法不起作用:

soup.find_all("li", {"class": KNOWN_STRING})

我也尝试过这种方法,但没有任何运气:

soup.select("li[class^="+KNOWN_STRING)

如何解决这个问题?

最佳答案

我会使用regex在这种方法中。

import re

soup.find_all('li', {'class': re.compile(r'regex_pattern')})

因为您有一个已知的字符串,但有一个任意的(我假设未知)数字,您可以使用正则表达式来定义您期望的字符串的模式。示例:

re.compile(r'^KNOWN_STRING[0-9]+$')

这将找到末尾带有一个或多个数字的所有已知字符串。请参阅this有关 Python 中正则表达式的更多信息。

编辑,回答问题:

Would this be correct given two digits in the id? soup.find_all('li', {'class': re.compile(r'^TheMatch v-1 c-[0-9][0-9]+$')}). I assume that it wouldn't.

对于末尾的两位数字,您将执行以下操作:

soup.find_all('li', {'class': re.compile(r'^TheMatch v-1 c-[0-9]{2}$')})

+ 仅表示前面的一个或多个正则表达式。

我所做的就是在正则表达式后面的括号{2}中指定我期望出现的实例数量2

关于Python BeautifulSoup - 查找类名称以某个字符串开头的所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38879133/

相关文章:

java - 两个 .compareTo 方法问题?

c# - 限制标签中的字符数

python - 将 pandas dtypes 转换为 BigQuery 类型表示

python - 使用 TOR 运行 python 脚本

javascript - 如果链接中包含单词 "photo"

javascript - 如何将时间线图表与 ControlWrapper 绑定(bind)以过滤时间线

python - 仅在位置 0 保留具有唯一值的子数组

python - 属性错误: 'list' object has no attribute

javascript - 我想使用 jquery 在单击链接时同时执行导航选项卡和页面滚动

java - 字符串内存分配和字符串池概念