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 = c
和b.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)
我有一个 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 = c
和b.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)