假设我们想要找到所有类名都以已知字符串开头并以任意 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/