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

Python adds only first entry to excel file

我有一个 url 的列表,我正在解析那一侧的联系部分。到目前为止,一切都很好。 找到联系路径后,我想将 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

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

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()

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

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

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

将 return b = 8,而

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

将returnb = [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)