【发布时间】:2020-11-24 05:57:10
【问题描述】:
我试图弄清楚是否可以创建一个在执行结束时调用的函数,无论其他函数是否遇到任何错误。更具体地说 - 在以下示例中有一个函数bound_to_call(),一旦执行完成或中断,需要自动调用该函数。在scrapy def close(spider, reason) 中有一个方法正是我试图描述的。
我想使用此函数 bound_to_call() 保存 Excel 工作簿,因为当调用此行 wb.save('SO.xlsx') 时工作簿就存在了。但是,通常最后会调用该行,如果不调用,即使脚本抓取了大部分结果,也不会有工作簿。
import requests
from bs4 import BeautifulSoup
from openpyxl import Workbook
link = "https://stackoverflow.com/questions/tagged/web-scraping"
def get_info(s,link):
r = s.get(link)
soup = BeautifulSoup(r.text,"lxml")
for item in soup.select(".summary"):
user = item.select_one(".user-details > a").get_text(strip=True)
title = item.select_one(".question-hyperlink").get_text(strip=True)
ws.append([user,title])
print(user,title)
def bound_to_call():
wb.save('SO.xlsx')
if __name__ == "__main__":
wb = Workbook()
wb.remove(wb['Sheet'])
ws = wb.create_sheet('useractivity')
ws.append(['name','title'])
with requests.Session() as s:
get_info(s,link)
bound_to_call()
问题:如何在执行结束时调用函数,不管是否有错误?
【问题讨论】:
标签: python python-3.x function web-scraping