Python で BeautifulSoup を使用して HTML を解析しています。私が対処している問題の 1 つは、ヘッダー行間で colspans が異なる状況があることです。(ヘッダー行は、私の専門用語で列見出しを取得するために結合する必要がある行です) つまり、1 つの列がその上または下の複数の列にまたがる可能性があり、スパンに基づいて単語を追加または前に追加する必要があります。以下は、これを行うためのルーチンです。BeautifulSoup を使用して colspans をプルし、各行の各セルの内容をプルします。longHeader は、ほとんどの項目を含むヘッダー行の内容です。spanLong は、行内の各項目の colspans を含むリストです。これは機能しますが、あまり Pythonic には見えません。
また、差分が 0 未満の場合は機能しません。これを機能させるために使用したのと同じアプローチで修正できます。しかし、その前に、誰かがこれをすぐに見て、より Pythonic なアプローチを提案できるかどうか疑問に思います。私は長年の SAS プログラマーなので、型を破るのに苦労していますが、SAS マクロを書いているかのようにコードを書きます。
longHeader=['','','bananas','','','','','','','','','','trains','','planes','','','','']
shortHeader=['','','bunches','','cars','','trucks','','freight','','cargo','','all other','','']
spanShort=[1,1,3,1,3,1,3,1,3,1,3,1,3,1,3]
spanLong=[1,1,3,1,1,1,1,1,1,1,1,1,3,1,3,1,3,1,3]
combinedHeader=[]
sumSpanLong=0
sumSpanShort=0
spanDiff=0
longHeaderCount=0
for each in range(len(shortHeader)):
sumSpanLong=sumSpanLong+spanLong[longHeaderCount]
sumSpanShort=sumSpanShort+spanShort[each]
spanDiff=sumSpanShort-sumSpanLong
if spanDiff==0:
combinedHeader.append([longHeader[longHeaderCount]+' '+shortHeader[each]])
longHeaderCount=longHeaderCount+1
continue
for i in range(0,spanDiff):
combinedHeader.append([longHeader[longHeaderCount]+' '+shortHeader[each]])
longHeaderCount=longHeaderCount+1
sumSpanLong=sumSpanLong+spanLong[longHeaderCount]
spanDiff=sumSpanShort-sumSpanLong
if spanDiff==0:
combinedHeader.append([longHeader[longHeaderCount]+' '+shortHeader[each]])
longHeaderCount=longHeaderCount+1
break
print combinedHeader