将列表项作为字符串传递(或使用替代方法)?

时间:2014-04-03 07:22:12

标签: python beautifulsoup

我正在编写一个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前面有两个空格,结尾处每一行,我都不知道如何做到这一点,而不是使它成为列表/数组(?)。关于我将如何执行任务的任何建议?

1 个答案:

答案 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')))