我正在尝试覆盖AttributeError消息,以便它不会给我错误消息,而只是继续执行脚本。该脚本查找并打印了office_manager名称,但是在某些情况下没有列出管理器,因此我需要它来忽略那些情况。有人可以帮忙吗?
for office_manager in soup.find(text="Office_Manager").findPrevious('h4'):
try:
print(office_manager)
except AttributeError:
continue
finally:
print("none")
答案 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
将跳过该条目。