我很擅长在python中使用xlsxwriter
。我在python中创建了一个刮刀,它运行得很完美。但是,当我尝试使用xlsxwriter
在excel文件中写入这些数据时,我会陷入困境。到目前为止我所写的内容可以创建一个excel文件并编写从for循环派生的最后填充数据。如何纠正我的脚本以写入所有数据而不是最后一个。如果我知道如何在运行中附加新填充的值,那会更好。
底线是,我有两个问题:
row("A1"), row("A2")
,但我希望它们像row("A1"), row("B1")
一样。我试过的脚本:
import requests
from bs4 import BeautifulSoup
import xlsxwriter
row = 0
col = 0
with xlsxwriter.Workbook('torrent.xlsx') as workbook:
worksheet = workbook.add_worksheet()
with requests.Session() as s:
s.headers = {"User-Agent":"Mozilla/5.0"}
res = s.get("https://www.yify-torrent.org/search/1080p/")
soup = BeautifulSoup(res.text, 'lxml')
for item in soup.select(".mv"):
name = item.select("a")[0].text
link = item.select("a")[0]['href']
data = name , link
for elem in data:
worksheet.write(row, col, elem)
row += 1
结果我喜欢(在一条线上):
title
link
然而,我希望他们喜欢(在不同的行中):
title link
title1 link1
title2 link2
等等。
for
循环,你覆盖data
,所以只有最后分配的东西存活下来。这可以通过将你的第二个for
循环移动到第一个内部来解决,因此它会被调用data
的每个值。col
时需要为worksheet.write
使用不同的值。您使用row += 1
前进到后续行; col += 1
会为列做同样的事情。正如Scott Hunter所说,你覆盖了你的数据,这些数据在数据变量中作为元组存储得很好。但是,似乎您的问题出现在for循环中,您只在每个块中添加行,这就解释了为什么您的代码只在您的电子表格中垂直移动。也许重新安排事情并添加迭代器可能会有所帮助?
for idx,elem in enumerate(data):
worksheet.write(row, idx, elem)
row += 1
对于每次迭代的代码,枚举函数将始终为idx变量添加1,因此,这个单个代码块可以扩展到您的数据元组很长的时间。
希望这可以帮助!