从下一个兄弟姐妹的tex中提取数字

2024-10-02 02:41:01 发布

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

我想把每个数字分配给python2.7中合适的标签。在下面的例子中,我有2个数字和2个标签。由于NavigableString类型的原因,我无法迭代next_同级的元素。但是,如果我不能,我怎么处理这个问题呢? 谢谢

编辑:我不能基于div标记进行搜索,因为名称和数字可能在完全不同的html标记中。因此,我不想限制这一点

from bs4 import BeautifulSoup
    tempHtml = """
    <html>
        <body>
            <div>
                <h1>tag1</h1>
                aaaa
                <div class="tel">here is 0111 111 1111 <span class="note">*</span></div>
                <h1>tag2</h1>
                <div class="tel mob">0111 222 2222 <span class="note">**</span></div>
            </div>
        </body>
    </html>
    """

soup = BeautifulSoup(tempHtml, 'html.parser')
extracted = soup.find_all(['h1'])
for i in range(len(extracted)):
    for sibling in extracted[i].next_siblings:
        tagname = extracted[i].text.strip()
        number_with_text = extracted[i].next_element
        number = re.findall('\d+', number_with_text)
        number = ''.join(number)
        print(str(number) + ' >> ' + str(tagname))

预期产量:

0111 111 1111 >> tag1
0111 222 2222 >> tag2

Tags: text标记divnumberhtmlbody数字标签
1条回答
网友
1楼 · 发布于 2024-10-02 02:41:01

这里有一条路

查找h1-div同级的列表。然后在每种情况下,从div的文本中找出电话号码,并获得text的前一个兄弟姐妹的div

>>> tempHtml = open('temp.htm').read()
>>> import bs4
>>> for div in soup.select('h1 ~ div'):
...     bs4.re.search(r'([0-9][0-9 ]{12})', div.text).groups(0)[0], '>>', div.findPreviousSibling().text
...     
... 
('0111 111 1111', '>>', 'tag1')
('0111 222 2222', '>>', 'tag2')

相关问题 更多 >

    热门问题