假设我们想要找到所有li
个元素,这些元素的类名都以一个已知的字符串开头,并以任意的id号结尾。
这意味着这种方法不起作用:
soup.find_all("li", {"class": KNOWN_STRING})
我也没试过这种方法:
soup.select("li[class^="+KNOWN_STRING)
如何解决这个问题?
答案 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]")