我想将每个数字分配给python2.7中的合适标签。在下面的例子中,我有2个数字和2个标签。我不能迭代next_siblings的元素,因为NavigableString类型可能是这种情况。但是,如果我不能,我怎么能处理这个问题呢? 谢谢
编辑:我无法基于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
答案 0 :(得分:0)
这是单向的。
找到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')