Python regex:从具有类似结构的html元素获取文本

2024-04-16 12:58:28 发布

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

出于某种原因,我需要使用正则表达式从网站中提取一些数据。数据具有相似的HTML结构,只有文本不同。 为了简单起见,我用这种方式来表示:

p = '<div class="col-xs-6"><p>Gender:</p></div><div class="col-xs-6"><a href="/skor/herr">Herr</a>, <a href="/skor/dam">Dam</a></div>'
t = '<div class="col-xs-6"><p>Kategori:</p></div><div class="col-xs-6"><a href="/skor/kangor-boots">Boots</a></div>'
s = p + t

我只对“Gender”感兴趣,也就是说我只想提取“Herr”和“Dam”。你知道吗

到目前为止,我想出了两个选择-都不起作用:

m = re.findall("Gender.+?<div.+?>([\w ]+)<\/.+?<\/div>", s, re.DOTALL)

提供:

[“先生”]

我猜是因为它不贪婪

但如果我让它变得贪婪:

re.findall("Gender.+?<div.+>([\w ]+)<\/.+?<\/div>", s, re.DOTALL)

它返回:

[“靴子”]

所以我正在努力想办法把“Herr”和“Dam”都搞定,什么都没有?你知道吗


Tags: 数据divre网站htmlcolgenderclass
1条回答
网友
1楼 · 发布于 2024-04-16 12:58:28

可以这样使用BeautifulSoup

from bs4 import BeautifulSoup
a='<div class="col-xs-6"><p>Gender:</p></div><div class="col-xs-6"><a href="/skor/herr">Herr</a>, <a href="/skor/dam">Dam</a></div>'
soup = BeautifulSoup(a,"html.parser")
if 'Gender' in (str(soup.findAll('div'))):
    for ana in soup.findAll('div'):
        for i in ana.findAll('a'):
            print(i.next_element) 

输出:

Herr
Dam

我建议将name属性添加到div中,以便更容易确定正确的标记

p = '<div name="Gender" class="col-xs-6"><p>Gender:</p></div><div name="Gender" class="col-xs-6"><a href="/skor/herr">Herr</a>, <a href="/skor/dam">Dam</a></div>'
t = '<div class="col-xs-6"><p>Kategori:</p></div><div class="col-xs-6"><a href="/skor/kangor-boots">Boots</a></div>'
a = p + t

soup = BeautifulSoup(a,"html.parser")
for ana in soup.findAll('div',{"name":"Gender"}):
    for i in ana.findAll('a'):
        print(i.next_element) 

输出:

 Herr
 Dam

相关问题 更多 >