Как я могу переопределить AttributeError, чтобы мой сценарий продолжался - PullRequest
0 голосов
/ 10 мая 2019

Я пытаюсь переопределить сообщение AttributeError, чтобы оно не выдавало мне сообщение об ошибке, а просто продолжало выполнение сценария. Сценарий находит и печатает имя office_manager, но в некоторых случаях в списке нет менеджера, поэтому он мне нужен, чтобы просто игнорировать эти случаи. Кто-нибудь может помочь?

for office_manager in soup.find(text="Office_Manager").findPrevious('h4'):
    try:
        print(office_manager)
    except AttributeError:
        continue
    finally:
        print("none")

Ответы [ 3 ]

0 голосов
/ 10 мая 2019

Я сделал некоторые поправки, но он все еще не печатает в мой CSV-файл. Любая помощь будет оценена, пожалуйста. Вот полный код:

from bs4 import BeautifulSoup
import requests
import csv

source = requests.get('https://beta.companieshouse.gov.uk/company/00930291/officers').text

soup = BeautifulSoup(source, 'lxml')

csv_file = open('names.csv', 'w')

csv_writer = csv.writer(csv_file)
csv_writer.writerow(['Main Manager', 'Office Manager'])


for main_manager in soup.find(text="Correspondence address").findPrevious('a'):
```print(main_manager)

ofc_mgr = soup.find(text="Director")
if ofc_mgr:
```for office_manager in ofc_mgr.findPrevious('h2'):
``````try:
`````````print(office_manager)
``````except AttributeError:
`````````pass
``````finally:
`````````print("none")

```csv_writer.writerow([main_manager, office_manager])

csv_file.close()
0 голосов
/ 10 мая 2019

С bs4 4.7.1.Вы можете использовать :contains, :has and :not.Ниже печатаются имена директоров (если директоров нет, вы получите пустой список)

import requests
from bs4 import BeautifulSoup as bs

r = requests.get('https://beta.companieshouse.gov.uk/company/00930291/officers')
soup = bs(r.content, 'lxml')
names = [item.text.strip() for item in soup.select('[class^=appointment]:not(.appointments-list):has([id^="officer-role-"]:contains(Director)) h2')]
print(names)
0 голосов
/ 10 мая 2019

Я думал, что кто-то менее ленивый, чем я, преобразует мой комментарий в ответ, но, как нет, вот так:

for office_manager in soup.find(text="Office_Manager").findPrevious('h4'):
    try:
        print(office_manager)
    except AttributeError:
        pass
    finally:
        print("none")

Использование pass пропустит запись.

...