如何覆盖AttributeError使脚本继续

时间:2019-05-10 12:39:50

标签: python python-3.x web-scraping attributeerror continue

我正在尝试覆盖AttributeError消息,以便它不会给我错误消息,而只是继续执行脚本。该脚本查找并打印了office_manager名称,但是在某些情况下没有列出管理器,因此我需要它来忽略那些情况。有人可以帮忙吗?

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

4 个答案:

答案 0 :(得分:1)

由于错误来自.find,因此应该是一个尝试的错误,甚至更好,它应该像这样。

try:
    office_manager = soup.find(text="Office_Manager").findPrevious('h4')
except AttributeError as err:
    print(err) # or print("none")
    pass # return or continue
else:
   for title in office_manager:
       print(title)

答案 1 :(得分:0)

我已经进行了一些修改,但是仍然无法打印到我的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()

答案 2 :(得分:0)

使用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)

答案 3 :(得分:-1)

我以为没有一个比我懒的人会将我的评论转换为答案,但不然,你去吧:

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

使用pass将跳过该条目。