我正在尝试解析一个时间表网页,而我打印出的问题是有关于死区的精神问题。这是因为我在许多情况下看到的标签都有'& 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 ' ': continue
和if td.text == ' ': 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;" > </td>
<td style="border-bottom:3px solid #000000;" > </td>
<td style="border-bottom:3px solid #000000;" > </td>
<td style="border-bottom:3px solid #000000;" > </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我将代码复制过来并犯了一个小错误,将其留在那里。
答案 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;" > </td>
<td style="border-bottom:3px solid #000000;" > </td>
<td style="border-bottom:3px solid #000000;" > </td>
<td style="border-bottom:3px solid #000000;" > </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>