在Excel中将值打印到新行

时间:2018-08-15 17:38:45

标签: python excel xlsxwriter

我目前正在浏览网页,并从每个<td>元素中提取值,并将它们作为文本追加到列表中,我想将其导出到Excel电子表格中。

问题是我想将所有不同网页中的值复制到电子表格上各自的行中,但是我只能在发送到excel之前弄清楚如何将所有数据附加到列表中,因此这是打印所有数据到1行。

我真的需要在excel中将每个网页放在单独的一行上,但无法弄清楚如何编写。

这就是我所拥有的-

import requests, bs4, xlsxwriter

td_text = []
row = 0
col = 0

def print_table():
    for i in range(1, 10):
        base_link = 'http://some/website/%d' % (i)
        try:
            res = requests.get(base_link)
            res.raise_for_status()
            techSoup = bs4.BeautifulSoup(res.text, 'html.parser')
            table = techSoup.find('table', attrs={'class':'table borderless'})
            for div in table:
                rows = div.findAll('td')
                for string in rows:
                    td_text.append(string.text)
                    print(string.text)
                    send_excel(row, col)



        except requests.exceptions.HTTPError:
            print('Error: Invalid Website \n\n.')

def send_excel(row, col):
    workbook = xlsxwriter.Workbook('list.xlsx')
    worksheet = workbook.add_worksheet()
    row += 1
    worksheet.write_row(row, col, td_text)

    workbook.close()

print_table()

所有数据均正确地从网站中提取。

我可以看到我的问题是,在调用write_row()之前,所有数据都会追加到列表中,但是我不确定如何编写它,因此每个网站在遍历循环时都会写入电子表格。

1 个答案:

答案 0 :(得分:0)

如果考虑代码的执行位置(就局部作用域和循环而言),您将意识到您要打开和关闭该文件数十次(效率非常低下),永远不要增加行计数器,并且切勿在两次请求之间清除文本数据。您只需要打开和关闭文件一次,就可以为每组数据只写一次该行。尝试这样的事情:

import requests, bs4, xlsxwriter

workbook = xlsxwriter.Workbook('list.xlsx')
worksheet = workbook.add_worksheet()

for i in range(1, 10):
    td_text = []
    base_link = 'http://some/website/%d' % (i)
    try:
        res = requests.get(base_link)
        res.raise_for_status()
        techSoup = bs4.BeautifulSoup(res.text, 'html.parser')
        table = techSoup.find('table', attrs={'class':'table borderless'})
        for div in table:
            rows = div.findAll('td')
            for string in rows:
                td_text.append(string.text)
        worksheet.write_row(i, 0, td_text)

    except requests.exceptions.HTTPError:
        print('Error: Invalid Website \n\n.')

workbook.close()