0

次の情報を解析する方法を見つけたかったのです。

<tr>
   <td class="prodSpecAtribute">Rulebook Chapter</td>
   <td colspan="5">
     <a href="http://cmegroup.com/rulebook/CME/V/450/452/452.pdf" target="_blank" title="CME Chapter 452">CME Chapter 452</a>
   </td>
</tr>

<tr>
   <td class="prodSpecAtribute" rowspan="2">
      Trading Hours
      <br>
      (All times listed are Central Time)
   </td>
   <td>OPEN OUTCRY</td>
   <td colspan="4">
      <div class="font_black Large_div_td">MON-FRI: 7:20 a.m. - 2:00 p.m.</div>
   </td>
</tr>
<tr>
   <td>CME GLOBEX</td>  #PROBLEM HERER -- WANT this and  div below to be one row, considered under class <td class="prodSpecAtribute" rowspan="2"> ... Trading Hours... 

   <td colspan="4">
      <div class="font_black Large_div_td">SUN - FRI: 5:00 p.m. - 4:00 p.m. CT</div>
   </td>
</tr>

次のように、トップテーブルの情報を簡単に解析できました。

soup = BeautifulSoup(page)
left_col = soup.findAll('td', attrs={'class' : 'prodSpecAtribute'})
right_col= soup.findAll('td', colspan=['4', '5'])

したがって、この例では 3 つの行があります。2 つの行にはclass "prodSpecAtribute"、各クラスに対応する少なくとも 1 つの列があります。ただし、最後の行にはclass がないため、最後のクラスを使用して、同じクラスの下でこれを定義する方法が必要です<td>CME GLOBEX and SUN - FRI: 5:00 p.m. - 4:00 p.m. CT

Combine_column メソッド:

def combine_col(right):
    num = len(right)

    for i in range(0, num):
        text_ = ' '.join(right[i].findAll(text=True))
        print text_

    return text_
4

1 に答える 1

1

2 番目の行の 2 番目と 3 番目の列をマージする明白な方法は、行を明示的に反復処理することです。何を記述してfind_allも、row0-col1、row1-col1、および row1-col2 が 3 つの個別の値として返されるだけであり、どれが一緒になるかを知る方法はありません。

したがって、私があなたの問題を理解していれば、次のようなものが必要です。

left_col = []
right_col = []
for tr in soup.find_all('tr'):
    tds = tr.find_all('td')
    left, right = tds[0], tds[1:]
    assert('prodSpecAtribute' in left['class'])
    left_col.append(left)
    right_col.append(combine_columns(right))

combine_columns列に「情報を組み合わせる」方法がわからないため、そのコードを記述する必要があることを除いて。

私は明らかに、どの列にも class があるのではなく、列 0 が左側にあるというルールを使用していますprodSpecAttribute。私がこれを行った主な理由は、そのような列を持たない行、またはそれが左端の列ではない行に対して何をしたいのかがわからないためです。assertそのため、これがソースにとって常に正しいルールであることを確認するために、健全性チェック用を追加しました。

于 2013-05-22T01:09:30.777 に答える