提问人:AriffKmy 提问时间:8/3/2023 更新时间:8/3/2023 访问量:33
使用 Python 在 html 标签中提取/搜索所需的字符串/文本
Extract/search for wanted string/text within html tag using Python
问:
我有一个 html 文件,其中包含 400 个 html 标签,我想从标签中提取一些特定的文本。此文件是本地文件,而不是联机网页。我只是先尝试使用 1 个 html 文件来检查和确认逻辑。在实际需求中,我将使用一批 html 文件(超过 50 个 html 文件)运行它。
我想提取的是位于这些标签之间的任何文本:
我想要的文本在 html 文件中,此标记可能被多次使用 1。
我确实尝试使用此代码从文件中提取文本
global count
with open(file_path, 'r', encoding ="utf8") as fp:
lines = fp.readlines()
text= '<div class="th-choice-list-name headerViewModeElementLoc th-choice-list- description-value">'
for line in lines:
if line.find(text) != -1:
count = count + 1
result = re.search('<div class="th-choice-list-name headerViewModeElementLoc th- choice-list- description-value">(.*)</div>', line)
print(result.group(1))
print(count)
我的问题是:
- 它只能识别 line.find(...) 的第一次搜索,而不能识别下一个类似的标记。
- 它无法提取我想要的确切文本,因为有重复的“......' 标记,因此它将采用从第一个 <div class=“th-choice-list-name headerViewModeElementLoc ...并以任何结尾
这将是作为输入的 html 文件的“简化”版本(粗体是我想要的文本)
</div><div id="th-templateEditor-section17-header" class="th-section" componentid="17"><div id="th-17-button_submenu" class="x-btn button_submenu inline_div x-btn-default-small"><div class="th-choice-list-name headerViewModeElementLoc th-choice-list-description-value">**Text I wanted 1**</div><em id="th-17-button_submenu-btnWrap" class=""><button id="th-17-button_submenu-btnEl" type="button" hidefocus="true" role="button" autocomplete="off" title="Menu" class="x-btn-center" aria-label="Menu"><span id="th-17-button_submenu-btnInnerEl" class="x-btn-inner" style=""> </span><span id="th-17-button_submenu-btnIconEl" class="x-btn-icon x-hide-display"> </span></button></em></div><div class="th-choice-list-name headerViewModeElementLoc th-choice-list-description-value">**Text I wanted 2**</div><div id="th-templateEditor-section17-header-invalid-message" class="invalidElementMessage">
答:
0赞
tax evader
8/3/2023
#1
正如@Barmar所建议的那样,我认为您应该使用像 BeautifulSoup 这样的第三方库,使用 find_all() 解析和查找具有给定条件的标签,因为它比使用正则表达式更容易简化解析和搜索
from bs4 import BeautifulSoup
html = '''
<div id="th-templateEditor-section17-header" class="th-section" componentid="17"><div id="th-17-button_submenu" class="x-btn button_submenu inline_div x-btn-default-small"><div class="th-choice-list-name headerViewModeElementLoc th-choice-list-description-value">**Text I wanted 1**</div><em id="th-17-button_submenu-btnWrap" class=""><button id="th-17-button_submenu-btnEl" type="button" hidefocus="true" role="button" autocomplete="off" title="Menu" class="x-btn-center" aria-label="Menu"><span id="th-17-button_submenu-btnInnerEl" class="x-btn-inner" style=""> </span><span id="th-17-button_submenu-btnIconEl" class="x-btn-icon x-hide-display"> </span></button></em></div><div class="th-choice-list-name headerViewModeElementLoc th-choice-list-description-value">**Text I wanted 2**</div><div id="th-templateEditor-section17-header-invalid-message" class="invalidElementMessage"></div>
'''
search_classes = 'th-choice-list-name headerViewModeElementLoc th-choice-list-description-value'.split(' ')
parsed_html = BeautifulSoup(html, "html.parser")
divs = parsed_html.find_all('div', {'class': search_classes})
for div in divs:
print(div.text)
评论