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

时间:2016-08-10 16:41:16

标签: python html string css-selectors beautifulsoup

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

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

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

我也没试过这种方法:

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

如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

我会在这种方法中使用regex

import re

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

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

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

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

编辑,回答问题:

  

如果ID中有两位数,这会是正确的吗? soup.find_all('li',{'class':re.compile(r'^ TheMatch v-1 c- [0-9] [0-9] + $')})。我认为它不会。

最后两位数字你会这样做:

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

+只表示前一个正则表达式中的一个或多个。

我所做的是在正则表达式后面的括号{2}中指定我期望在那里2的实例数。

答案 1 :(得分:0)

您选择的不正确,只需使用KNOWN_STRING,不要将其包装为引号并确保使用右括号:

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