我正在编写一个reddit bot,它将一些html(特别是表格)转换为markdown。
假设soup
是我提取的网页的BeautifulSoup
个对象,这是我的代码:
myTable = soup.find('div', id='damage-chart-panel').findAll('tr')
text = list()
for tr in myTable:
text.append(tr.findAll('td'))
for item in text: #a list item in 'text'
tags = '(<[^>]+>)' #pattern for <anything enclosed in these things>
re.sub(tags, '|', item) #because markdown table cols are separated by |
print text
当我运行此操作时,我收到错误TypeError: expected string or buffer
。我意识到这种情况正在发生,因为我将列表项传递给re.sub()
。我现在一直在寻找解决方案,但我仍然无法绕过它。如何将列表项作为字符串传递?
另外:我考虑过让text
成为一个字符串,但问题是我应该追加换行符,即\n
前面有两个空格,结尾处每一行,我都不知道如何做到这一点,而不是使它成为列表/数组(?)。关于我将如何执行任务的任何建议?
答案 0 :(得分:2)
您可以将元素转换为字符串并使用str.join()
:
text.append('\n'.join([str(cell) for cell in tr.find_all('td')]))
或者您可以使用list.extend()
:
text.extend(map(str, tr.find_all('td')))