使用b4进行刮削时排除隐藏标记

2024-04-29 10:13:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个网站,在html中有很多隐藏的标签。 我粘贴了下面的源代码。 问题是隐藏标签上有两种类型

1.带有style="display:none"

2.它们在每个td标记下都有提到的样式列表。在

每一个td标签都会改变。 对于下面的示例,它有以下样式:

hLcj{display:none}
.J9pE{display:inline}
.kUC-{display:none}
.Dzkb{display:inline}
.mXJU{display:none}
.DZqk{display:inline}
.rr9s{display:none}
.nGF_{display:inline}

因此带有class=hLcj, kUC, mXJU, rr9s,etc的元素是隐藏元素

我想提取整个tr的文本,但排除这些隐藏的标记。 我绞尽脑汁想了好几个小时,还是没有成功。在

任何帮助都将不胜感激。谢谢 我正在使用bs4和{}

^{pr2}$

Tags: 标记none元素网站粘贴htmldisplayinline
1条回答
网友
1楼 · 发布于 2024-04-29 10:13:30

使用selenium将使任务变得更容易,因为它知道哪些元素是隐藏的,哪些元素是不隐藏的

但是,无论如何,这里有一个基本代码,您可能需要进一步改进。这里的想法是解析style标记并获得要排除的类的列表,有一个要排除的标记列表,并检查tr中每个子元素的style属性:

import re
from bs4 import BeautifulSoup

data = """ your html here """

soup = BeautifulSoup(data)
tr = soup.tr

# get classes to exclude
classes_to_exclude = []
for line in tr.style.text.split():
    match = re.match(r'^\.(.*?)\{display:none\}', line)
    if match:
        classes_to_exclude.append(match.group(1))

tags_to_exclude = ['style', 'script']

texts = []
for item in tr.find_all(text=True):
    if item.parent.name in tags_to_exclude:
        continue

    class_ = item.parent.get('class')
    if class_ and class_[0] in classes_to_exclude:
        continue

    if item.parent.get('style') == 'display:none':
        continue

    texts.append(item)

print ''.join(texts.strip())

印刷品:

^{pr2}$

另请参见:

相关问题 更多 >