查找匹配特定 类 但有一个 class 不断变化的标签

Find Tags that Match Specific Classes but one class keeps changing

我想从 div 标签中提取信息,该标签具有一些特定的 classes。

Class 格式为 abc def jss238 xyz

现在,jss class 号码不断变化,所以一段时间后,classes 将变为 abc def jss384 xyz

提取信息的最佳方式是什么,这样即使标签也发生变化,代码也不会中断。

我目前使用的代码是

val = soup.findAll('div', class_="abc def jss328 xyz")
    

我觉得正则表达式是个好方法,但我也可以不使用jss吗class而只使用其他3个来搜索?

所以是的,您可以使用正则表达式来查找具有 abc def <pattern of 3 letters and 3 digits> xyz

的模式

就我个人而言,我会看看您是否可以从源头获取数据。当类变成那样的时候,一般是因为页面是通过javascript渲染出来的,但是需要把数据放在那里,从某个地方获取。如果你分享 url 和你想要的数据,我可以看看是否是这样。但这是正则表达式版本:

from bs4 import BeautifulSoup
import re

html = '''<div class="abc def jss238 xyz">jss238 text</div>
<div class="abc def jss384 xyz">jss384 text</div>
<div class="hij klm jss238 xyz">doesn't match the pattern</div>'''


soup = BeautifulSoup(html, 'html.parser')

regex = re.compile('abc def \w{3}\d{3} xyz')
specialDivs = soup.find_all('div', {'class':regex})


for each in specialDivs:
    print(f'html: {each}\tText: {each.text}')

输出:

html: <div class="abc def jss238 xyz">jss238 text</div> Text: jss238 text
html: <div class="abc def jss384 xyz">jss384 text</div> Text: jss384 text