Я пытаюсь очистить контактную информацию компании, мне удалось получить все остальное, кроме номера телефона. Это HTML

<ul>
    <li>
        <h3>Harrrrrell   INC</h3>
    </li>
    <li>43 Airpark Ct</li>
    <li>Alabaster, MD 35107</li>
    <li><span style="font-weight: bold;">Phone</span>: 888-232-8358</li>
    <li><span style="font-weight: bold;">Corporate URL</span>: <a href="http://www.hhsales.com" rel="nofollow" target="new">www.h23hsales.com</a></li>
    <li><span style="font-weight: bold;">More Detail</span>:<br> <a href="https://www.collierreporting.com/company/harrell-and-hall-enterprises-inc-alabaster-al">Click for Full Harrell &amp; Hall Enterprises INC Dossier</a></li>
</ul>

Этот скрипт python работает со всем остальным в этом html, кроме номера телефона.

for companyLIST in result[0:]:
            try:

                companyname = companyLIST.find('h3').contents[0]
                print("Company Name ",str(companyname) )
            except Exception as e:
                print("errror",str(e))

            try:
                companySt = companyLIST.find_all('li')[1].contents[0]
                print("Company St ",str(companySt) )
            except Exception as e:
                print("errror",str(e))

            try:
                companyCity = companyLIST.find_all('li')[2].contents[0]
                print("Company City ",str(companyCity) )
            except Exception as e:
                print("errror",str(e))

            try:
                companyPhone= companyLIST.find('li')[3].contents[0]
                print("Company Phone ",companyPhone )

            except Exception as e:
                print("errror",str(e))

            try:
                companyWeb = companyLIST.find('a')['href'] 

                print("Company Web ",str(companyWeb) )
                print("  " )

            except Exception as e:
                print("errror",str(e))

Это пример вывода для

Название компании Harrrrrell INC

Компания St 43 Airpark Ct

Компания City Alabaster, MD 35107

Ошибка 3

Веб-сайт компании https://www.collierreporting.com/ компания / Харрелл - и - холл- предприятия - вкл - алебастр аль

Отслеживание (последний вызов был последним):

  File "sample.py", line 26, in <module>
    companyPhone = soup.find('li')[3].contents[0]
  File "...dist-packages/bs4/element.py", line 1011, in __getitem__
    return self.attrs[key]
KeyError: 3

Как можно было переписать приведенный ниже код, чтобы получить номер телефона?

companyPhone= companyLIST.find('li')[3].contents[0]
                print("Company Phone ",companyPhone )
-1
learner101 24 Сен 2018 в 13:05

2 ответа

Лучший ответ

Я предполагаю, что вы используете библиотеку beatifulsoup4 для разбора HTML. Если да, вы можете получить номер телефона из html следующим образом:

text = soup.find_all('li')[3].contents[1]
phone_number = re.sub(": ", "", text)

print(phone_number)
1
Isabek Tashiev 24 Сен 2018 в 10:59

Замещать

companyPhone= companyLIST.find('li')[3].contents[0]
            print("Company Phone ",companyPhone )

С участием

if "Phone" in companyLIST:                                                                                                 
    companyPhone = companyLIST.split(':')[-1].replace(' ','').replace('</li>','')

Приведенный выше код разбивает список на символ «:», выбирает последний элемент и удаляет ненужную информацию. В итоге отдельной строкой остается только номер телефона. Вы можете сделать то же самое с остальными строками, просто разумно выберите разделительный символ / строку и очистите результирующий элемент списка с помощью функции замены.

Надеюсь, это полезно.

0
Dan Butmalai 24 Сен 2018 в 10:54