我正在创建一个函数来废弃谷歌搜索结果并用它们创建一个 df 。我在函数中遇到了一个问题,该变量显然是在赋值之前被引用的,并且我遇到了这个问题。
我正在使用 API 来搜索结果,它一次只能下载 100 个结果,因此我必须发出三个请求才能获取我需要的数量(前 300 个结果)。
我的目的是创建一个执行此操作的函数,同时在其参数中指定我需要搜索的查询;我要下载的结果数量(100,最大);以及启动请求的结果数(该参数必须为 0、100 和 200)。
def requester(query, start, results):
headers = {
"apikey": ""}
params = (
("q",query),
("num", results),
("start", start)
)
resp = requests.get('https://app.zenserp.com/api/v2/search', headers=headers, params=params);
data = json.loads(resp.text)
df_partial = pd.json_normalize(data["organic"])
if start == 0:
df = df_partial
else:
df=pd.concat(df, df_partial)
df["query"] = query
创建函数后,我用这一行调用它:
start_points = [*range(0, 300, 100)]
for i in start_points:
requester("my query", i, "100")
API所需的sintaxis没问题,只需要一个请求就可以下载信息。当我尝试实现此函数以在 if/else 语句中附加/连接对 API 的不同调用时,就会出现问题。有了这个声明,我的逻辑就是下一个:如果 start_point = 0,这意味着我的最终数据帧必须与使用 json 创建的 df_partial 相同,如果 start_point =/ 0 这意味着 df 已经存在,我只需要连接或附加新的(“df_partial”)已创建的“df”。
我得到的错误是:
UnboundLocalError: local variable 'df' referenced before assignment
我知道问题在于我定义变量“df_partial”和“df”的方式。但我无法解决它。
if start == 0:
df = df_partial
else:
df=pd.concat(df, df_partial)
else
部分指的是定义之前的df
变量。
def requester(query, start, results):
global df # Declare df as a global variable
headers = {
"apikey": ""}
...