删除BeautifulSoup

时间:2016-11-22 14:39:34

标签: html python-2.7 parsing beautifulsoup

我正在尝试解析一个时间表网页,而我打印出的问题是有关于死区的精神问题。这是因为我在许多情况下看到的标签都有'& nbsp'作为文本条目。当我们没有课程时,那个空间就在那里。

from bs4 import BeautifulSoup
import urllib2
url="http://timetable.ait.ie/reporting/individual;student+set;id;AL%5FKNTWM%5F7%5F3%0D%0A?t=student+set+individual&days=1-5&weeks=&periods=3-20&template=student+set+individual"
page=urllib2.urlopen(url)
soup = BeautifulSoup(page.read(), 'lxml')
sources = soup.findAll('table')
for source in sources:
    for tr in source.findAll('tr'):
        for td in tr.findAll('td',{"rowspan":True}):
            if td.text is u'\xa0': continue             
            else:
                print td.text

这是我到目前为止的代码,我尝试过if td.text is '&nbsp': continueif td.text == '&nbsp': continue以及if td.text == u'\xa0': continue,但这些选项都不适用于我。这是我试图解析的HTML代码的一部分。

<!-- START ROW OUTPUT -->
                <tr >
                    <td style="border-bottom:3px solid #000000;" rowspan='1' >Mon</td>
                    <td style="border-bottom:3px solid #000000;" >&nbsp;</td>
                    <td style="border-bottom:3px solid #000000;" >&nbsp;</td>
                    <td style="border-bottom:3px solid #000000;" >&nbsp;</td>
                    <td style="border-bottom:3px solid #000000;" >&nbsp;</td>
                    <td style="border-bottom:3px solid #000000;"  colspan='2' rowspan='1' >
                        <!-- START OBJECT-CELL -->
                        <table  cellspacing='0' border='0' width='100%'>
                            <col align='left' />
                            <tr>
                                <td align='left'><font color='#000000'>Networks Security 3</font></td>
                            </tr>
                        </table>
                        <table  cellspacing='0' border='0' width='100%'>
                            <col align='left' />
                            <col align='right' />
                            <tr>
                                <td align='left'><font color='#000000'>W206</font></td>
                                <td align='right'><font color='#000080'>Bennett, Tom</font></td>
                            </tr>
                        </table>
                        <table  cellspacing='0' border='0' width='100%'>
                            <col align='left' />
                            <tr>
                                <td align='left'><font color='#000080'>3-9, 11-14</font></td>
                            </tr>
                        </table>
                        <!-- END OBJECT-CELL -->

正如您所看到的那样,有多个'td'标签有&amp; nbsp作为选项但后来我需要计算这些不间断的空格来计算出类的时间。任何帮助将不胜感激。

编辑:请忽略for循环中的rowspan我将代码复制过来并犯了一个小错误,将其留在那里。

1 个答案:

答案 0 :(得分:0)

html = '''
        <!-- START ROW OUTPUT -->
                <tr >
                    <td style="border-bottom:3px solid #000000;" rowspan='1' >Mon</td>
                    <td style="border-bottom:3px solid #000000;" >&nbsp;</td>
                    <td style="border-bottom:3px solid #000000;" >&nbsp;</td>
                    <td style="border-bottom:3px solid #000000;" >&nbsp;</td>
                    <td style="border-bottom:3px solid #000000;" >&nbsp;</td>
                    <td style="border-bottom:3px solid #000000;"  colspan='2' rowspan='1' >
                        <!-- START OBJECT-CELL -->
                        <table  cellspacing='0' border='0' width='100%'>
                            <col align='left' />
                            <tr>
                                <td align='left'><font color='#000000'>Networks Security 3</font></td>
                            </tr>
                        </table>
                        <table  cellspacing='0' border='0' width='100%'>
                            <col align='left' />
                            <col align='right' />
                            <tr>
                                <td align='left'><font color='#000000'>W206</font></td>
                                <td align='right'><font color='#000080'>Bennett, Tom</font></td>
                            </tr>
                        </table>
                        <table  cellspacing='0' border='0' width='100%'>
                            <col align='left' />
                            <tr>
                                <td align='left'><font color='#000080'>3-9, 11-14</font></td>
                            </tr>
                        </table>
                        <!-- END OBJECT-CELL -->'''

from bs4 import BeautifulSoup
import re

soup = BeautifulSoup(html, 'lxml')

tds = soup.find_all(name='td', text=re.compile(r"^\S"))
for td in tds:
    print(td)

出:

<td rowspan="1" style="border-bottom:3px solid #000000;">Mon</td>
<td align="left"><font color="#000000">Networks Security 3</font></td>
<td align="left"><font color="#000000">W206</font></td>
<td align="right"><font color="#000080">Bennett, Tom</font></td>
<td align="left"><font color="#000080">3-9, 11-14</font></td>