开发者社区> 问答> 正文

使用beautifulsoup和pandas抓取时,如何在xlsx文件中追加行?

所以,我一直在寻找,我似乎无法弄清为什么我无法从我的抓取结果中写入xlsx文件。

我正在运行.csv文件中的网址列表。我在其中扔了10个网址,beautifulsoup刮了它们。如果我只是打印数据框,那是我们的权利。

如果我尝试将结果另存为xlsx(首选)或csv,则只会给出最后一个URL的结果。

如果我运行它,它可以完美打印

with open('G-Sauce_Urls.csv' , 'r') as csv_file:
    csv_reader = csv.reader(csv_file)

    for line in csv_reader:
        r = requests.get(line[0]).text

        soup = BeautifulSoup(r,'lxml')
        business = soup.find('title')
        companys = business.get_text()
        phones = soup.find_all(text=re.compile("Call (.\*"))
        Website = soup.select('head > link:nth-child(4)')
        profile = (Website[0].attrs['href'])

        data = {'Required':[companys], 'Required_no_Email':[phones], 'Business_Fax':[profile] }
        df = pd.DataFrame(data, columns = ['Required','First', 'Last', 'Required_no_Email', 'Business_Fax'])

但是我似乎无法将其追加到xlsx文件中。我只得到最后一个结果,我认为这是因为它只是“写”而不是追加。 我试过了:

writer = pd.ExcelWriter("ProspectUploadSheetRob.xlsx", engine='xlsxwriter', mode='a')
df.to_excel(writer, sheet_name='Sheet1', index=False, startrow=4, header=3)

workbook  = writer.book
worksheet = writer.sheets['Sheet1']
writer.save()

    with ExcelWriter('path_to_file.xlsx', mode='a') as writer:
         df.to_excel(writer, sheet_name='Sheet1', index=False, startrow=4, header=3)
writer.save()

 df = pd.DataFrame(data, columns = ['Required','First', 'Last', 'Required_no_Email', 'Business_Fax'])
    writer = pd.ExcelWriter("ProspectUploadSheetRob.xlsx", engine='xlsxwriter')
    df.to_excel(writer, sheet_name='Sheet1', index=False, startrow=4, header=3)

writer.save()

我开始阅读openpyxl,但现在我很困惑,我听不懂。

任何和所有帮助表示赞赏

问题来源:stackoverflow

展开
收起
is大龙 2020-03-24 13:53:55 702 0
1 条回答
写回答
取消 提交回答
  • 您正在逐行遍历csv数据,但是每次迭代都在重新创建数据帧,因此每次都丢失前一个的值。您将需要先在循环外部创建df,然后在for循环中添加数据。

    df = pd.DataFrame(columns = ['Required','First', 'Last', 'Required_no_Email', 'Business_Fax'])
    
    >>> df
    Empty DataFrame
    Columns: [Required, First, Last, Required_no_Email, Business_Fax]
    Index: []
    

    您假设编写而不追加的假设是正确的,但是您需要追加数据框,然后将其写入excel,而不要将数据追加到excel(如果我理解正确的话)。

    data = {'Required':[companys], 'Required_no_Email':[phones], 'Business_Fax':[profile] }
    df = df.append(data, ignore_index=True) # use this instead of this part of your original code below:
    # df = pd.DataFrame(data, columns = ['Required','First', 'Last', 'Required_no_Email', 'Business_Fax']) 
    # this will not be required as you have already defined the df outside the loop
    

    pd.ExcelWriter仅在运行时产生输出:

    writer.save()
    

    我有一个类似的代码,可以使用以下参数打开文件,并且可以正常工作:

    writer = pd.ExcelWriter(r'path_to_file.xlsx', engine='xlsxwriter')
    ... all my modifications ...
    writer.save()
    

    请注意,根据文档“ w”或“写入”是默认模式,即使在修改对象时也是如此,尽管没有太多说明,但是只有在添加全新的excel对象(Sheets等)或“扩展”文档时才引用append。另一个与文档结构格式完全相同的数据框。为了使其可复制,您可以添加模板xlsx,但我希望它会有所帮助。请告诉我。

    回答来源:stackoverflow

    2020-03-24 13:54:03
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
中文:即学即用的Pandas入门与时间序列分析 立即下载
即学即用的Pandas入门与时间序列分析 立即下载
低代码开发师(初级)实战教程 立即下载