无法相应地在excel文件中写入数据

问题描述 投票:0回答:2

我很擅长在python中使用xlsxwriter。我在python中创建了一个刮刀,它运行得很完美。但是,当我尝试使用xlsxwriter在excel文件中写入这些数据时,我会陷入困境。到目前为止我所写的内容可以创建一个excel文件并编写从for循环派生的最后填充数据。如何纠正我的脚本以写入所有数据而不是最后一个。如果我知道如何在运行中附加新填充的值,那会更好。

底线是,我有两个问题:

  1. 我的脚本只写入最后填充的值
  2. 这两个字段正在写成一行,如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

等等。

python python-3.x web-scraping xlsxwriter
2个回答
2
投票
  1. 每次通过第一个for循环,你覆盖data,所以只有最后分配的东西存活下来。这可以通过将你的第二个for循环移动到第一个内部来解决,因此它会被调用data的每个值。
  2. 如果您希望事物位于不同的列中,则在调用col时需要为worksheet.write使用不同的值。您使用row += 1前进到后续行; col += 1会为列做同样的事情。

0
投票

正如Scott Hunter所说,你覆盖了你的数据,这些数据在数据变量中作为元组存储得很好。但是,似乎您的问题出现在for循环中,您只在每个块中添加行,这就解释了为什么您的代码只在您的电子表格中垂直移动。也许重新安排事情并添加迭代器可能会有所帮助?

for idx,elem in enumerate(data):
    worksheet.write(row, idx, elem)
    row += 1

对于每次迭代的代码,枚举函数将始终为idx变量添加1,因此,这个单个代码块可以扩展到您的数据元组很长的时间。

希望这可以帮助!

© www.soinside.com 2019 - 2024. All rights reserved.