如图,用Python将HTML的list转化为table

img

s= "<body><ol><li>coffee,milk,water</li><li>banana,apple</li><li>tea</li></ol></body>"
s1 = "<body><table border=\"1\"><tr><td>1</td><td>coffee</td><td>milk</td><td>water</td></tr><tr><td>2</td><td>banana</td><td>apple</td><td></td></tr><tr><td>3</td><td>tea</td><td></td><td></td></tr></table></body>"
assert lists2tables(s) == s1


s= "<body><ol><li>coffee,milk,water</li><li>banana,apple</li><li>tea</li></ol><ol><li>banana,apple</li><li>tea</li></ol></body>"
s1 = "<body><table border=\"1\"><tr><td>1</td><td>coffee</td><td>milk</td><td>water</td></tr><tr><td>2</td><td>banana</td><td>apple</td><td></td></tr><tr><td>3</td><td>tea</td><td></td><td></td></tr></table><table border=\"1\"><tr><td>1</td><td>banana</td><td>apple</td></tr><tr><td>2</td><td>tea</td><td></td></tr></table></body>"
assert lists2tables(s) == s1

你这题目理解错了吧?我看是说 s = “<ol><li>xxx</li></ol>” 这种格式,为啥你写的是直接1,2,3

import re

s = "<ol>  \
        <li>coffee, mile, water</li>  \
        <li>banana, apple</li>  \
        <li>tea</li>  \
    </ol>"

table = s.replace("<ol>", "<table style='border=1'>")  \
    .replace("</ol>", "</table>")  \
    .replace("<li>", "<tr><td>")  \
    .replace("</li>", "</td>")  \
    .replace(",", "</td><td>")

print(table)

import bs4
def lists2tables(s):
soup = BeautifulSoup(s, 'html.parser')
#print (soup.find_all("ol"))
res=""
ols=soup.find_all("ol")
for ol in ols:
table=""
table+="<table border="1">"
conter=1
lis=ol.find_all("li")
#print (soup.li.string.split(","))
length=0
#print (len(soup.li.string.split(",")))

    for i in lis:
        a=len(i.string.split(","))
    #print (i,a)
        if length < len(i.string.split(",")):
            length=a

    for li in lis:
        table+="<tr><td>"
        table+=str(conter)
        table+="</td>"
        #print (li.string)
        comm=li.string.split(",")
        if len(comm)<length:
            for i in range (len(comm),length):
                comm.append("")
    
    #print (comm)
        for i in comm:
            table+="<td>"
            table+=i
            table+="</td>"
        
        table+="</tr>"
        conter+=1
    table+="</table>"
    res+=table
res+="</body>"
return res