我正在尝试浏览网站的 HTML 并解析它以查找班级的最大注册人数。我尝试检查 HTML 文件的每一行中的子字符串,但这会尝试解析错误的行。所以我现在使用正则表达式。我有\t\t\t\t\t\t\t<td class="odd">([0-9])|([0-9][0-9])|([0-9][0-9][0-9])<\/td>\r\n
作为我现在的正则表达式,但此正则表达式与最大注册人数以及部分编号匹配。还有另一种方法可以处理我试图从网页中提取的内容吗? HTML 代码片段如下:
<tr>
<td class="tableHeader">Section</td>
<td class="odd">001</td>
</tr>
<tr>
<td class="tableHeader">Credits</td>
<td class="even" align="left"> 4.00</td>
</tr>
<tr>
<td class="tableHeader">Title</td>
<td class="odd">Linear Algebra</td>
</tr>
<tr>
<td class="tableHeader">Campus</td>
<td class="even" align="left">University City</td>
</tr>
<tr>
<td class="tableHeader">Instructor(s)</td>
<td class="odd">Guang Yang</td>
</tr>
<tr>
<td class="tableHeader">Instruction Type</td>
<td class="even">Lecture</td>
</tr>
<tr>
<td class="tableHeader">Max Enroll</td>
<td class="odd">30</td>
</tr>
不要使用 REGEXP 解析 HTML。
使用正确的工具完成正确的工作。
让我们打个比方来解释为什么它是错误的:这就像试图拥有一个5岁理解Hamlet,而他没有词汇和语法去理解莎士比亚的,当他能够时他会得到处理更抽象的概念.
使用任一lxml or BeautifulSoup要做到这一点。
举个例子:获取所有偶数和奇数的列表:
>>> from lxml import etree
>>> tree = etree.HTML(your_html_text)
>>> odds = tree.xpath('//td[@class="odd"]/text()')
>>> evens = tree.xpath('//td[@class="even"]/text()')
>>> odds
['001', 'Linear Algebra', 'Guang Yang', '30']
>>> evens
[' 4.00', 'University City', 'Lecture']
edit:
我只是想以一种无法获得部分编号和最大注册编号的方式提取内容。我只需要帮助获取最大注册号码。
好的,现在我得到了你想要的,所以这是使用 lxml 的解决方案:
>>> for elt in tree.xpath('//tr'):
... if elt.xpath('td[@class="tableHeader"]')[0].text == "Max Enroll":
... elt.xpath('td[@class="odd"]|td[@class="even"]')[0].text
...
'30'
在那里你有only最大报名人数。
使用 BeautifulSoup 会更容易一些:
>>> bs = BeautifulSoup(your_html_text)
>>> for t in bs.findAll('td', attrs={'class': 'tableHeader'}):
... if t.text == "Max Enroll":
... print t.findNext('td').text
'30'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)