hei*_*nst 3 html python regex html-parsing python-2.7
我试图通过网站的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>
Run Code Online (Sandbox Code Playgroud)
使用正确的工具来完成正确的工作.
让我们做一个类比来解释为什么它是错的:就像试图让一个5岁的人了解哈姆雷特,而他没有词汇和语法来理解莎士比亚,他将会得到他将能够处理更抽象的概念.
二者必选其一lxml或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']
Run Code Online (Sandbox Code Playgroud)
编辑:
我只是试图以这样的方式提取内容,我没有得到节号和最大注册号.我只需要帮助只获得Max Enroll号码.
好的,现在我得到了你想要的东西,所以这里是使用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'
Run Code Online (Sandbox Code Playgroud)
那里只有最大注册号码.
使用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'
Run Code Online (Sandbox Code Playgroud)