Python/Gspread:删除空白和格式化数据的代码

8yoxcaq7  于 2023-04-19  发布在  Python
关注(0)|答案(2)|浏览(128)

我正在构建一个小工具来抓取TTRPG网站的数据并将数据写入Google表单。这是我迄今为止的代码:

import requests
from bs4 import BeautifulSoup
import gspread

gc = gspread.service_account(filename='credentials.json')

sh = gc.open('D&D_Tables').sheet1

url = 'https://www.d20srd.org/srd/monsters/achaierai.htm'
r = requests.get(url)
soup = BeautifulSoup(r.text, 'html.parser')
# line below uses Beautiful Soup to locate table entries within HTML, returns all results as text
monster_stats_table = soup.find('table', class_='statBlock').text
# line below converts to dictionary, other program returns an error
new_mst =[monster_stats_table]
sh.append_row(new_mst) # currently appends all information to one cell, needs to be broken up

信息显示在一个单元格中,扩展到几十行,有很多额外的空格。我尝试了几种方法来删除空格并正确格式化数据,但似乎没有任何效果。Showing Problem我试图让表看起来像这样:Correct Table感谢您提供的任何帮助或建议。:)
我尝试使用.strip方法,以及导入json库和(单独)导入AST库以使用建议删除空格的函数。由于原始数据的格式化,两者都无法返回输出。我在想我需要找到一种方法将数据写入JSON对象,然后找到一种方法将其导入到工作表中,但我不确定这是最好的方法,也不知道该怎么做

dsf9zpds

dsf9zpds1#

我不使用GSpread,但这里有一些东西可以让你更容易地使用结构化数据,例如,你可以很容易地将其导入到GSpread工作表。

import pandas as pd
import requests

url = "https://www.d20srd.org/srd/monsters/achaierai.htm"
df = pd.read_html(requests.get(url).content.decode("utf-8"), flavor="bs4")
pd.concat(df).to_csv("achaierai.csv", index=False, header=False)

这将输出一个.csv文件,如下所示:

vulvrdjw

vulvrdjw2#

如果你在monster_stats_table上调用.text,它会把它变成一大块文本,就像你在“显示问题”示例中看到的那样。你可能想做的是把表的标题和数据单元格变成数组,你可以根据需要切片。
由于看起来您试图将信息转置到标题行和数据行中,因此可能需要执行以下操作:

monster_stats_table = soup.find('table', class_='statBlock')
table_header_elements = monster_stats_table.find_all('th')
table_data_elements = monster_stats_table.find_all('td')

然后你可以把这些转换成字符串数组,写入你的google表单。

headers = [header_element.text for header_element in table_header_elements]
data = [data_element.text for data_element in table_data_elements]

sh.append_row(headers)
sh.append_row(data)

希望这能让你摆脱困境。请随意使用对你有用的变量名。

相关问题