Для меня вы должны использовать регулярное выражение, используя пакет re
, чтобы получить то, что вы хотите, потому что у вас есть несколько div
только с классом _3hls
и нет, один или несколько телефонных номеров.
Регулярное выражение для поиска номера в этом примере взято из здесь
Вы можете сделать что-то вроде этого:
from bs4 import BeautifulSoup as bs4
import re
def validNumber(phone_nuber):
pattern = re.compile("^[\dA-Z]{3}-[\dA-Z]{3}-[\dA-Z]{4}$", re.IGNORECASE)
return pattern.match(phone_nuber) is not None
html = """<div class="pam _3-95 _2pi0 _2lej uiBoxWhite noborder">
<div class="_3-96 _2pio _2lek _2lel"> NAME </div>
<div class="_3-96 _2let">
<div class="_3hls"> PHONE NUMBER</div>
<div class="_3hls">middle_name: MIDDLE NAME </div>
<div class="_3hls">note: 0</div>
<table cellpadding="0" cellspacing="0" class="uiGrid _51mz _21op" style="table-layout: fixed;">
<tbody>
<tr class="_51mx">
<td class="_51m- _2oao">number_times_contacted</td>
<td class="_51m- _2piu _23bw _51mw">31</td>
</tr>
<tr class="_51mx">
<td class="_51m- _2oao">contact_id</td>
<td class="_51m- _2piu _23bw _51mw">4914</td>
</tr>
<tr class="_51mx">
<td class="_51m- _2oao">starred</td>
<td class="_51m- _2piu _23bw _51mw">0</td>
</tr>
<tr class="_51mx">
<td class="_51m- _2oao">last_time_contacted</td>
<td class="_51m- _2piu _23bw _51mw">1475961803207</td>
</tr>
<tr class="_51mx">
<td class="_51m- _2oao">custom_ringtone</td>
<td class="_51m- _2piu _23bw _51mw">0</td>
</tr>
<tr class="_51mx">
<td class="_51m- _2oao">in_visible_group</td>
<td class="_51m- _2piu _23bw _51mw">0</td>
</tr>
<tr class="_51mx">
<td class="_51m- _2oao">send_to_voicemail</td>
<td class="_51m- _2piu _23bw _51mw">0</td>
</tr>
<tr class="_51mx">
<td class="_51m- _2oao">is_user_profile</td>
<td class="_51m- _2piu _23bw _51mw">0</td>
</tr>
</tbody>
</table>
</div>
<div class="_3-94 _2lem">٠١/٠٩/٢٠١٥ ٢:٢٤ م</div>
</div>"""
contacts = soup.find_all('div', {'class': 'pam _3-95 _2pi0 _2lej uiBoxWhite noborder'})
for contact in contacts:
name = contact.find('div', {'class': '_3-96 _2pio _2lek _2lel'}).text
phone_numbers = []
for div in contact.find_all('div', {'class': '_3hls'}):
# Test here if div.text is a phone number
# you can use regex, package...
if validNumber(div.text):
phone_numbers.append(div.text)
print(name)
print(phone_numbers)