我有以下内容,似乎无法做到正确:
newsItems = []
dummy_exec_data = '''
scraped_data = soup.select("div#content, div.gamma > a, a")
for data in scraped_data:
from bs4 import BeautifulSoup
partial_soup = BeautifulSoup(str(data), "html.parser")
title = partial_soup.a.text
url = partial_soup.a["href"]
newsItems.append({"title":title, "url":url})
'''
exec(dummy_exec_data)
print(newsItems)
现在我想知道是否可以将newsItems传递给exec函数以便可以填充它。目前,当块正确地刮取数据时,它返回空。看起来像newsItems没有看到范围。
答案 0 :(得分:2)
将对象作为本地或全局传递:
exec(dummy_exec_data, {}, {'newsItems': newsItems})
这会明确地将名称作为locals
命名空间的一部分传递,以避免意外传递过多信息。
演示:
>>> newsItems = []
>>> exec('newsItems.append("foo")', {}, {'newsItems': newsItems})
>>> newsItems
['foo']