1週間ほど前に問題がありました。解決策はクールだと思うので、以前に投稿した質問への回答を待っている間、ここで共有します. テーブル内の列見出しの相対的な位置を知る必要があるため、列見出しを下の行のデータと一致させる方法を知っています。一部のテーブルに、テーブルの最初の行として次の行があることがわかりました
<!-- Table Width Row -->
<TR style="font-size: 1pt" valign="bottom">
<TD width="60%"> </TD> <!-- colindex=01 type=maindata -->
<TD width="1%"> </TD> <!-- colindex=02 type=gutter -->
<TD width="1%" align="right"> </TD> <!-- colindex=02 type=lead -->
<TD width="9%" align="right"> </TD> <!-- colindex=02 type=body -->
<TD width="1%" align="left"> </TD> <!-- colindex=02 type=hang1 -->
<TD width="3%"> </TD> <!-- colindex=03 type=gutter -->
<TD width="1%" align="right"> </TD> <!-- colindex=03 type=lead -->
<TD width="4%" align="right"> </TD> <!-- colindex=03 type=body -->
<TD width="1%" align="left"> </TD> <!-- colindex=03 type=hang1 -->
<TD width="3%"> </TD> <!-- colindex=04 type=gutter -->
<TD width="1%" align="right"> </TD> <!-- colindex=04 type=lead -->
<TD width="4%" align="right"> </TD> <!-- colindex=04 type=body -->
<TD width="1%" align="left"> </TD> <!-- colindex=04 type=hang1 -->
<TD width="3%"> </TD> <!-- colindex=05 type=gutter -->
<TD width="1%" align="right"> </TD> <!-- colindex=05 type=lead -->
<TD width="5%" align="right"> </TD> <!-- colindex=05 type=body -->
<TD width="1%" align="left"> </TD> <!-- colindex=05 type=hang1 -->
</TR>
データは type=body の下の列にあるので、これは簡単だろうと思いました。カウントダウンすると、データ行で列 [3、7、11、15] の値を取得する必要があることがわかりました。そこで、次のコードを使用してそれを達成することに着手しました。
indexComment = souptoGetColIndex.findAll(text=re.compile("type=body"))
indexRow=indexComment[0].findParent()
indexCells=indexRow.findAll(text=re.compile("type=body"))
for each in range(len(indexCells)):
collist.append(tdlist.index(indexCells[each].previousSibling.previousSibling))
私が得たのは collist=[0, 3, 7, 7, 15] でした
7 番目と 11 番目のセルがまったく同じように見えたため、同じインデックス位置が返されたと思います。私はこれに対処する方法を見つけようとしていました.明らかに、それらを異なって見えるようにする必要がありました. そのため、最初に readlines を使用してファイルの各行を読み取り、空白をランダムな整数に変更することで、見た目を変えました。
for each in toGetColIndex:
newlt.append(each.replace(r" ",str(random.randint(1,14567))))
友人は、代わりにこれを使用することでオーバーヘッドを削減できると指摘しました
for each in toGetColIndex:
newlt.append(each.replace(r" ",str(toGetColIndex.index(each))))
それにもかかわらず、これらの各アプローチは、各列のヘッダーの場所の colindex を含むリストを取得し、データ行で使用します。実際のコードでは r"&.nbsp;" を使用しているため、html によって空白が消えていると思われるため、replace 関数に空白がないことに注意してください。ピリオドなし