我有一个网址列表,该网址在该侧的联系人部分进行了解析。到现在为止还挺好。找到联系路径后,我想将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
您每次都在更新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 = 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)
您正在循环覆盖数据,因此保存了最后一项。您可以根据以下示例修改代码。
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()