将值打印到 excel 中的新行
Printing values to new line in excel
我目前正在遍历网页并从每个 <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()
之前所有数据都附加到列表中,但我不确定我将如何编写它以便每个网站在迭代时写入电子表格循环。
如果您考虑代码的执行位置(就本地作用域和循环而言),您会发现您打开和关闭该文件数十次(效率非常低),从不递增您的代码行计数器,并且从不清除请求之间的文本数据。您只需要打开和关闭文件一次,并且您只想为每组数据写入一次行。尝试这样的事情:
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()
我目前正在遍历网页并从每个 <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()
之前所有数据都附加到列表中,但我不确定我将如何编写它以便每个网站在迭代时写入电子表格循环。
如果您考虑代码的执行位置(就本地作用域和循环而言),您会发现您打开和关闭该文件数十次(效率非常低),从不递增您的代码行计数器,并且从不清除请求之间的文本数据。您只需要打开和关闭文件一次,并且您只想为每组数据写入一次行。尝试这样的事情:
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()