所以,我一直在寻找,我似乎无法弄清为什么我无法从我的抓取结果中写入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
您正在逐行遍历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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。