Python仅将第一个条目添加到excel文件中

问题描述 投票:0回答:2

我有一个网址列表,该网址在该侧的联系人部分进行了解析。到现在为止还挺好。找到联系路径后,我想将url +解析后的路径写到我的excel文件中。问题是:它仅写入最后一个值。我确定我无法通过循环,但我找不到错误。

我是新手,请不要生气:D

使用Python 3.7.3

import requests
import bs4
import pandas as pd
from urllib.parse import urlparse
import xlrd

Workbook = xlrd.open_workbook("AlleDSKosmetik.xlsx")

Worksheet = Workbook.sheet_by_name("Tabelle1")


def FindFormular(url):
    try:
        res = requests.get(url)
    except:
        print(url + ' nicht erreichbar oder Fehlerhaft')
        return
    soup = bs4.BeautifulSoup(res.text, 'lxml')
    for link in soup.find_all('a', href=True):
        Formular = link['href']
        parsed_url = urlparse(Formular).path
        parsed_url = str(parsed_url)
        if parsed_url.find('kontakt') > -1:
            finalFormular = (url + parsed_url)
            print(finalFormular)
            data = pd.DataFrame({'Formulare': [finalFormular]})
            datatoexcel = pd.ExcelWriter('Formulare.xlsx', engine='xlsxwriter')
            data.to_excel(datatoexcel, sheet_name='Tabelle1')
            datatoexcel.save()
i = 0
for row_curser in range(1, 10):
    excel = Worksheet.cell(row_curser, 8).value
    url = 'http://' + excel
    FindFormular(url)
    i += 1
python pandas xlsxwriter
2个回答
0
投票

您每次都在更新excel和url的值,但不保存这两个值之间的值。小例子:

x = [1, 2, 3, 4, 5]
b = []
c = 0

for i in range(len(x)):
    b = c
    c+= 2

将返回b = 8,而

for i in range(len(x)):
    b.append(c)
    c+= 2

将返回b = [0, 2, 4, 6, 8]

希望这对您来说很清楚。 (请注意b = cb.append(c)之间的区别)

根据您的情况使用:

url = []

for row_curser in range(0, 9):
    excel = Worksheet.cell(row_curser, 8).value
    url.append('http://' + excel)
    FindFormular(url[row_curser])
    i += 1

将其写入Excel的最佳方法:

for row_curser in range(0, 9):
    excel = Worksheet.cell(row_curser, 8).value
    url.append('http://' + excel)
    i += 1

url = pd.DataFrame(url)
url.to_excel('excel_name.xlsx', index=False)

0
投票

您正在循环覆盖数据,因此保存了最后一项。您可以根据以下示例修改代码。

finalFormular = []
for link in [1, 2, 3, 4]:
    finalFormular.append(link)

if finalFormular:
    data = pd.DataFrame({'Formulare': finalFormular})
    datatoexcel = pd.ExcelWriter(os.path.join(os.getcwd(), 'Formulare.xlsx'), engine='xlsxwriter')
    data.to_excel(datatoexcel, sheet_name='Tabelle1')
    datatoexcel.save()
© www.soinside.com 2019 - 2024. All rights reserved.