我正在构建一个小工具来抓取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对象,然后找到一种方法将其导入到工作表中,但我不确定这是最好的方法,也不知道该怎么做
2条答案
按热度按时间dsf9zpds1#
我不使用GSpread,但这里有一些东西可以让你更容易地使用结构化数据,例如,你可以很容易地将其导入到GSpread工作表。
这将输出一个
.csv
文件,如下所示:vulvrdjw2#
如果你在
monster_stats_table
上调用.text
,它会把它变成一大块文本,就像你在“显示问题”示例中看到的那样。你可能想做的是把表的标题和数据单元格变成数组,你可以根据需要切片。由于看起来您试图将信息转置到标题行和数据行中,因此可能需要执行以下操作:
然后你可以把这些转换成字符串数组,写入你的google表单。
希望这能让你摆脱困境。请随意使用对你有用的变量名。