- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在从 URL 中抓取信息
我可以成功将信息获取到一个.xlsx
它不是我想要的格式。
element_rows = []
for table_row in Elements.findAll('tr'):
columns = table_row.findAll('td')
output_row = []
for column in columns:
sub_rows = column.findAll('p')
output_row.append('\r\n'.join(row.text for row in sub_rows))
element_rows.append(output_row)
感觉很简单,就是放不下
随着它的迭代,我希望它为每个“p”创建一个新行。
我一直在尝试使用 Excel 语法“\r\n”,但感觉这是不对的。我试过追加(行),但这会给我带来错误
目前它给了我一些类似的东西;
|A |B
1|Apple|PearOrangeBanana
2|Grape|MandarinOliveTomato
我愿意这样
|A |B
1|Apple|Pear
2| |Orange
3| |Banana
4|Grape|Mandarin
5| |Olive
6| |Tomato
好的。完整代码如下。
from bs4 import BeautifulSoup
import requests
import csv
from subprocess import Popen
import webbrowser
import re
from openpyxl import *
import tkinter as tk
import openpyxl
from itertools import zip_longest
#Variables
#Name of course
CourseName = 'AURAFA008'#input("Input Course Code: ")
#Base URL
TGAURL = 'https://training.gov.au/Training/Details/'
#.csv filename
CourseCSV = CourseName + '.csv'
CourseXLSX = CourseName + '.xlsx'
#Total URL of course
CourseURL = TGAURL + CourseName
#URL get
website_url = requests.get(CourseURL).text
#Beautiful soup work
soup = BeautifulSoup(website_url,'html.parser')
table = soup.table
#Excel Frameworks
# wb = Workbook()
wb = openpyxl.Workbook()
ws = wb.active
output_row = 1
#Open URL in browser
#webbrowser.open(CourseURL, 2)
# Define the tables I want to grab
Elements = (soup.find("h2", string="Elements and Performance Criteria")).find_next('table')
Foundation = (soup.find("h2", string="Foundation Skills")).find_next('table')
#Extract the data
Element_rows = []
for table_row in Elements.findAll('tr'):
columns = table_row.findAll('td')
output_row = []
for column in columns:
sub_rows = column.findAll('p')
for row in sub_rows:
output_row.append(row.get_text(separator=' '))
Element_rows.append(output_row)
Foundation_rows = []
for table_row in Foundation.findAll('tr'):
columns = table_row.findAll('td')
output_row = []
for column in columns:
sub_rows = column.findAll('p')
for row in sub_rows:
output_row.append(row.get_text(separator=' '))
Foundation_rows.append(output_row)
# Write the tables to .xlsx
Tab0 = (CourseName + 'Elements')
Tab1 = (CourseName + 'Foundation')
ws1 = wb.create_sheet(Tab0)
ws2 = wb.create_sheet(Tab1)
for row in Element_rows:
ws1.append(row)
for row in Foundation_rows:
ws2.append(row)
wb.remove(wb['Sheet'])
wb.save(CourseXLSX)
p = Popen(CourseXLSX, shell=True)
最佳答案
我建议您在进行过程中写入您的 excel 文件。对于每个表行,创建一个列表列表,其中包含存在的任何子行。然后您可以使用 Python 的 zip_longest()
函数为每一行返回一个子条目,其中一个列表比另一个列表短,例如:
from itertools import zip_longest
from bs4 import BeautifulSoup
import openpyxl
html = """
<table>
<tr>
<td><p>a</p><p>b</p></td>
<td><p>1</p><p>2</p><p>3</p></td>
<td><p>d</p></td>
</tr>
<tr>
<td><p>a</p><p>b</p></td>
<td><p>1</p><p>2</p><p>3</p></td>
<td><p>d</p></td>
</tr>
</table>
"""
soup = BeautifulSoup(html, "html.parser")
table = soup.table
wb = openpyxl.Workbook()
ws = wb.active
output_row = 1
for table_row in table.find_all('tr'):
cells = table_row.find_all('td')
row = [[row.text for row in cell.find_all('p')] for cell in cells]
for row_number, cells in enumerate(zip_longest(*row, fillvalue=""), start=output_row):
for col_number, value in enumerate(cells, start=1):
ws.cell(column=col_number, row=row_number, value=value)
output_row += len(cells)
wb.save('output.xlsx')
这将为您提供以下输出:
enumerate()
函数可用于为列表中的每个条目提供一个递增的数字。这可用于为 openpyxl 单元格提供合适的行号和列号。
关于Python:在列表中创建换行符以便 openpyxl 在 .xlsx 中识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56864726/
有没有办法使用 openpyxl 折叠多行?似乎没有与 openpyxl simple usage page 上的示例等效的行。 import openpyxl wb = openpyxl.Workb
我有一个应用程序,如果已经有数据,我将工作表写入最后一列 + 2,如果工作表为空,则写入最后一列 + 1。我得到了我认为是空的工作表,如下所示: from openpyxl.workbook.work
我有一个应用程序,如果已经有数据,我将工作表写入最后一列 + 2,如果工作表为空,则写入最后一列 + 1。我得到了我认为是空的工作表,如下所示: from openpyxl.workbook.work
当我从 openpyxl-2.5.12 升级到 openpyxl-3.0.3 时,我开始收到以下错误: C:\workspace\venv_py37_64\lib\site-packages\open
我可以使用以下代码创建垂直条形图: from openpyxl import Workbook wb = Workbook() ws = wb.active for i in range(10):
我对 openpyxl 库有疑问。 问题: 当我使用 xlwt,打开一个 .xls 文件,并在其中写入一些单元格时,我没有触及的单元格的样式保持不变。但现在我必须处理 xlsx 文档,所以我选择了 o
我想将Excel中的数据添加到词典中。但是,当我使用.append(TOTAL_SALES)时出现错误,当然,如果我使用+=TOTAL_SALES,则没有问题,只是我获得的是总和,而不是3个单独月份的
我想将Excel中的数据添加到词典中。但是,当我使用.append(TOTAL_SALES)时出现错误,当然,如果我使用+=TOTAL_SALES,则没有问题,只是我获得的是总和,而不是3个单独月份的
如何更改excel单元格数字格式General至Text不考虑单元格中的数据? 我正在使用 openpyxl 1.8.6。 最佳答案 我知道这个问题真的很老了,但它仍然可能是相关的,因为我在谷歌搜索同
我正在其中一个 Excel 工作表中打印一些公式: wsOld.cell(row = 1, column = 1).value = "=B3=B4" 但我不能使用它的结果来实现其他一些逻辑,如: if
如何使用openpyxl将数据表添加到图例区域如下图所示: openpyxl 中有一个 openpyxl.chart.chartspace.DataTable 类,但我找不到任何示例来使用它。 最佳答
如何使用openpyxl从Excel中的命名范围读取值? 我在http://openpyxl.readthedocs.org/en/latest/_modules/openpyxl/workbook/
请有人给我一个例子,如何复制 带有样式的整个工作表(来自行和列) 到同一工作簿中的第二个工作表? (也可以在新工作簿中) 谢谢。 P.S .:我尝试进行深度复制,但是在保存更改的数据单元时失败了。 目
我有以下函数,可以使用 openpyxl 库从 excel 工作簿中读取数据: import openpyxl def read_excel(path): excel_workbook = o
我有大量 Excel 文件,我只想处理未隐藏的工作表,我想忽略所有隐藏的工作表。 目前我的 python 脚本循环遍历每张纸,无论它是否被隐藏。有没有一种简单的方法来检查工作表是否被隐藏? 我在网上看
我需要做什么: 在 Python/Pandas 中打开 Excel 电子表格 使用 [name, balance] 创建 df 例子: 姓名 平衡 琼斯事工 45,408.83 史密斯事工 38,59
我正在创建一个程序,使用 python 和 openpyxl 将所有单个引号移动到一个单引号矩阵中,但是当尝试加载模型信息时,它似乎是从第一个引号重复模型。每个报价都是一个单独的 excel 文件,这
我有一个在 openpyxl 中打开并清理它并关闭工作簿的 excel 文件,示例代码如下: #filename is the name of the excel file used wb = loa
我正在使用 openpyxl库在电子表格上执行一些 excel 剪切/粘贴操作。 假设我的操作产生了以下数据(请将其用于重现性目的): col1;col2 1;0,17153686 2;0,61532
我想写一个新的工作簿,一张纸,然后在这张纸上添加一个表格。 AFAIK 应该是可能的,这个提交应该做到 https://bitbucket.org/openpyxl/openpyxl/commits/
我是一名优秀的程序员,十分优秀!