使用requests和Beautifulsoup在页面中查找文本(使用CSS)

2024-05-15 17:49:32 发布

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

我对一个网页做了一个请求,我试图在上面检索一些文本。文本用span标记拆分,如下所示:

<span class="ed">This</span>
<span class="1">is</span>
<span class="12">jvgviehrgjfne</span>
<span class="dfe">my</span>
<span class="fd">gt4ugirdfgr</span>
<span class="df">string</span>

有一些“内联样式表”(CSS sheets),表示我们是否必须在屏幕上打印文本,因此,不能在屏幕上打印乱七八糟的文本。这是表1的示例:

.ed{display:inline}
.1{display:inline}
.12{display:none}
.dfe{display:inline}
.fd{display:none}
.df{display:inline}

但是像这样的CSS文件还有很多。。所以我不知道有没有更好的方法来实现我的目标(打印屏幕上显示的文本,不要使用没有显示的胡言乱语)

我的脚本可以打印文本。。但所有这些(胡言乱语)如下:“这是JVIEHRGJFNE我的gt4ugirdfgr脚本!”你知道吗


Tags: 文本脚本none网页df屏幕displayinline
1条回答
网友
1楼 · 发布于 2024-05-15 17:49:32

如果我没听错的话,您应该用regex解析css文件中与inline相关的属性,并将结果提供给beautiful soup api。这里有一个方法:

import re
import bs4

page_txt = """
<span class="ed">This</span>
<span class="1">is</span>
<span class="12">jvgviehrgjfne</span>
<span class="dfe">my</span>
<span class="fd">gt4ugirdfgr</span>
<span class="df">string</span>
"""

css_file_read_output = """
.ed{display:inline}
.1{display:inline}
.12{display:none}
.dfe{display:inline}
.fd{display:none}
.df{display:inline}"""

css_file_lines = css_file_read_output.splitlines()

css_lines_text = []

for line in css_file_lines:
    inline_search = re.search(".*inline.*", line)
    if inline_search is not None:
        inline_group = inline_search.group()
        class_name_search = re.search("\..*\{", inline_group)
        class_name_group = class_name_search.group()
        class_name_group = class_name_group[1:-1] # getting rid of the last { and first .
        css_lines_text.append(class_name_group)
    else:
        pass

page_bs = bs4.BeautifulSoup(page_txt,"lxml")

wanted_text_list = []

for line in css_lines_text:
    wanted_line = page_bs.find("span", class_=line)
    wanted_text = wanted_line.get_text(strip=True)
    wanted_text_list.append(wanted_text)

wanted_string = " ".join(wanted_text_list)

相关问题 更多 >