0

HTML内容は次のとおりです。

<table cellspacing="1" cellpadding="0" class="data">
<tr class="colhead">
            <th colspan="3">Expression</th>
        </tr>
        <tr class="colhead">
            <th>Task</th>
            <th>Action</th>
            <th>List</th>
</tr>           
<tr class="rowLight">
    <td width="40%">
            Task1
        </td>
        <td width="20%">
             Assigned to 
        </td>
        <td width="40%">
             Harry
    </td>

</tr>           
<tr class="rowDark">
     <td width="40%">
                    Task2
                </td>
                <td width="20%">
                     Rejected by 
                </td>
                <td width="40%">
                    Lopa 
                </td>
</tr>

<tr class="rowLight">
    <td width="40%">
            Task5
        </td>
        <td width="20%">
             Accepted By 
        </td>
        <td width="40%">
            Mathew
        </td>
</tr>

ここで、次のように値を取得する必要があります:(以下のテーブルはExcelテーブルにすぎず、値に到達したら作成します)。

Task    Action        List
Task1   Assigned to   Harry
Task2   Rejected by   Lopa
Task5   Accepted By   Mathew

私が以下のように知っている素人の解決策:

   from bs4 import BeautifulSoup
   soup = BeautifulSoup(source_URL)

alltables = soup.findAll( "table", {"border":"2", "width":"100%"} )

t = [x for x in soup.findAll('td')]

[x.renderContents().strip('\n') for x in t]

しかし、私の上記のHTMLコンテンツにはそのような構造が存在しないので、どのようにアプローチするのですか?ここで案内してください!

4

1 に答える 1

2

.stripped_stringsテーブルの行から「興味深い」テキストを取得するために使用します。

rows = table.find_all('tr', class_=('rowLight', 'rowDark'))
for row in rows:
    print list(row.stripped_strings)

これは以下を出力します:

[u'Task1', u'Assigned to', u'Harry']
[u'Task2', u'Rejected by', u'Lopa']
[u'Task5', u'Accepted By', u'Mathew']

または、すべてをリストの1つのリストにプルするには(要求に応じて、最後の行は含まれません):

data = [list(r.stripped_strings) for r in rows[:-1]]

これは次のようになります。

data = [[u'Task1', u'Assigned to', u'Harry'], [u'Task2', u'Rejected by', u'Lopa']]

.find_all()、の結果はResultSetPythonリストと同じように機能し、たとえば、特定の行を無視するように自由にスライスできます。

于 2013-01-05T10:27:20.167 に答える