首页 > 解决方案 > 一旦所有页面都被循环并且值附加到我的列表中,我如何将抓取的值存储到数据框中?

问题描述

目前,我的数据框正在打印出 2 个数据框,但我希望它只是一个数据框,其中包含从omp_name_lists and comp_rating_lists. 我知道该函数正在逐页传递值,所以我想知道如何告诉 python 等待所有页面值追加,然后create_dataframe

def get_data(get_comp_name,get_comp_rating):


    comp_name_lists, comp_rating_lists = [],[]
    for i, v in  zip(get_comp_name, get_comp_rating):
        comp_name_lists.append(i.a.text)
        comp_rating_lists.append(v.text)

    return create_dataframe(comp_name_lists,comp_rating_lists)

def create_dataframe(comp_name_lists,comp_rating_lists): # This is where 
    """This gets all of our data that we scraped and stores into a pandas dataframe"""
    df = pd.DataFrame({'CompanyName' : comp_name_lists, 'CompanyRating' : comp_rating_lists})
    df = df.reset_index(drop=True)
    print(df)

期望的输出:

  A              B
0 a              3
1 b              7
2 c              1
3 d              2
4 e              8
5 f              9
6 g              7
7 h              8

标签: pythonpython-3.xweb-scrapingbeautifulsouprequest

解决方案


如果你想成为一个包含所有值的数据框,那么你应该有一个全局变量,因为它不会重新初始化,除非你重新启动脚本。如果您通过 传递值return create_dataframe(comp_name_lists,comp_rating_lists),它将创建一个独立于其他空间的新空间,并且 df 的值是空的,这意味着您无法以这种方式完成您期望的事情。在我的考虑中,在完成获取数据后创建一个数据框

resultset = {'CompanyName' : [], 'CompanyRating' : []}

def get_data(get_comp_name,get_comp_rating):


    comp_name_lists, comp_rating_lists = [],[]
    for i, v in  zip(get_comp_name, get_comp_rating):
        comp_name_lists.append(i.a.text)
        comp_rating_lists.append(v.text)

    resultset["CompanyName"] += comp_name_lists
    resultset["CompanyRating"] += comp_rating_lists

def create_dataframe(data): # This is where 
    """This gets all of our data that we scraped and stores into a pandas dataframe"""
    df = pd.DataFrame(data)
    df = df.reset_index(drop=True)
    print(df)

推荐阅读