我正在尝试使用 xlsxwriter 将数据抓取到一个 .xls 文件中,但它自己将数据写入 sheet 5 次而不是一次
I'm trying to scrape data into an .xls file with xlsxwriter but the data its self writes to the sheet 5 times instead of just once
我可以从我的网页向 excel sheet 写入我需要的重要数据,但它在移动到我的下一个 Ticker 符号之前向它写入了 6 次"Tickers.csv" 循环。
Values[0]<==(numbers) 是写入 5 次的数据,我不确定为什么。 Values2[0]<==(letters) 只写一次,这也是我希望 values[0] 也能做到的。
示例,
Values2[0] = Apple Inc, AAPL
值[0] = 123
123
123
123
123
123
Values[0] should equal this in my train of thought:
Values[0] = 123
我的代码是这样写的sheet:
苹果公司,AAPL
123
123
123
123
123
123
国际商用机器公司,IBM
456
456
456
456
456
456
我希望 sheet 变成这样,但不明白为什么不是这样:,
苹果公司,AAPL
123
国际商用机器公司,IBM
456
我正在使用 XPath 将数据抓取到 sheet 中,所以我知道将它放到 sheet 中的唯一方法是添加索引(即值 [0 ] 而不仅仅是值)。当我不添加索引时,我收到一条错误消息,提示我不允许编写列表。
如果您需要有关我的情况的更多信息,请询问并感谢您的宝贵时间。
def main():
导入 csv
导入 os
从 selenium 导入 webdriver
从硒导入 webdriver
chrome_path = r"C:\chromedriver\chromedriver.exe"
browser = webdriver.Chrome(chrome_path)
stocks_arr =[]
pfolio_file = open("tickers.csv", "r")
for line in pfolio_file:
indv_stock_arr = line.strip().split(",")
stocks_arr.append(indv_stock_arr)
stock_info_arr = []
for stock in stocks_arr:
stock_info = []
ticker = stock[0]
stock_info.append(ticker)
url="https://finance.yahoo.com/quote/{0}?p={0}&.tsrc=fin-srch".format(ticker)
browser.get(url)
try:
values_elementticker = browser.find_elements_by_xpath("//div[@class='D(ib) ']")
values2 = [x.text for x in values_elementticker]
print(values2[0])
except IndexError:
with open("results2.xls", "a") as f:
for i in range(len(values2)):
f.write(values2[0] + "\n")
try:
values_element = browser.find_elements_by_xpath("//span[@class='Trsdu(0.3s) ']")
values = [x.text for x in values_element]
print(values[0])
except IndexError:
with open("results2.xls", "a") as f:
f.write("-" + "\n")
with open("results2.xls", "a") as f:
for i in range(len(values2)):
f.write(values2[0] + "\n")
for i in range(len(values)):
f.write(values[0] + "\n")
print("Script completed")
browser.close()
restart = input("Do you wish to start again?").lower()
if restart == "yes":
main()
else:
exit()
main()
您使用 'values' 列表的范围启动 for 循环。
并且不是每次都写入新值(如:values[i]),而是每次都写入相同的第一个元素:values[0]
如果只需要一个元素,不需要循环...
所以隐藏循环,更改行:
for i in range(len(values)):
f.write(values[0] + "\n")
至:
#for i in range(len(values)):
f.write(values[0] + "\n")
我可以从我的网页向 excel sheet 写入我需要的重要数据,但它在移动到我的下一个 Ticker 符号之前向它写入了 6 次"Tickers.csv" 循环。
Values[0]<==(numbers) 是写入 5 次的数据,我不确定为什么。 Values2[0]<==(letters) 只写一次,这也是我希望 values[0] 也能做到的。
示例,
Values2[0] = Apple Inc, AAPL
值[0] = 123 123 123 123 123 123
Values[0] should equal this in my train of thought:
Values[0] = 123
我的代码是这样写的sheet:
苹果公司,AAPL
123
123
123
123
123
123
国际商用机器公司,IBM
456
456
456
456
456
456
我希望 sheet 变成这样,但不明白为什么不是这样:,
苹果公司,AAPL
123
国际商用机器公司,IBM
456
我正在使用 XPath 将数据抓取到 sheet 中,所以我知道将它放到 sheet 中的唯一方法是添加索引(即值 [0 ] 而不仅仅是值)。当我不添加索引时,我收到一条错误消息,提示我不允许编写列表。
如果您需要有关我的情况的更多信息,请询问并感谢您的宝贵时间。
def main(): 导入 csv 导入 os 从 selenium 导入 webdriver 从硒导入 webdriver
chrome_path = r"C:\chromedriver\chromedriver.exe"
browser = webdriver.Chrome(chrome_path)
stocks_arr =[]
pfolio_file = open("tickers.csv", "r")
for line in pfolio_file:
indv_stock_arr = line.strip().split(",")
stocks_arr.append(indv_stock_arr)
stock_info_arr = []
for stock in stocks_arr:
stock_info = []
ticker = stock[0]
stock_info.append(ticker)
url="https://finance.yahoo.com/quote/{0}?p={0}&.tsrc=fin-srch".format(ticker)
browser.get(url)
try:
values_elementticker = browser.find_elements_by_xpath("//div[@class='D(ib) ']")
values2 = [x.text for x in values_elementticker]
print(values2[0])
except IndexError:
with open("results2.xls", "a") as f:
for i in range(len(values2)):
f.write(values2[0] + "\n")
try:
values_element = browser.find_elements_by_xpath("//span[@class='Trsdu(0.3s) ']")
values = [x.text for x in values_element]
print(values[0])
except IndexError:
with open("results2.xls", "a") as f:
f.write("-" + "\n")
with open("results2.xls", "a") as f:
for i in range(len(values2)):
f.write(values2[0] + "\n")
for i in range(len(values)):
f.write(values[0] + "\n")
print("Script completed")
browser.close()
restart = input("Do you wish to start again?").lower()
if restart == "yes":
main()
else:
exit()
main()
您使用 'values' 列表的范围启动 for 循环。
并且不是每次都写入新值(如:values[i]),而是每次都写入相同的第一个元素:values[0]
如果只需要一个元素,不需要循环...
所以隐藏循环,更改行:
for i in range(len(values)):
f.write(values[0] + "\n")
至:
#for i in range(len(values)):
f.write(values[0] + "\n")