如何在python </ul> </li>中使用正则表达式获取多行<li>以下<ul>标记

时间:2013-05-20 20:42:53

标签: python expression beautifulsoup

我从网站上获取了这个HTML标记:

<ul><li>Some Keys in the UL List</li>
</ul>
<li>HKEY_LOCAL_MACHINE\SOFTWARE\Description</li>
<li>HKEY_LOCAL_MACHINE\SOFTWARE\Description\Microsoft</li>
<li>HKEY_LOCAL_MACHINE\SOFTWARE\Description\Microsoft\Rpc</li>
<li>HKEY_LOCAL_MACHINE\SOFTWARE\Description\Microsoft\Rpc\UuidTemporaryData</li>
</ul></ul>

<ul><li>Some objects in the UL LIST</li>
</ul>
<li>_SHuassist.mtx</li>
<li>MuteX.mtx</li>
<li>Something.mtx</li>
<li>Default.mtx</li>
<li>3$5.mtx</li>
</ul></ul>

如何获取<li>标记之间的行(<ul>标记之间的文本)。 他们当时没有任何类别。

我对BeautifulSoup和Regex不太了解。

我希望这个结果为例:

<li>_SHuassist.mtx</li>
<li>MuteX.mtx</li>
<li>Something.mtx</li>
<li>Default.mtx</li>
<li>3$5.mtx</li>

3 个答案:

答案 0 :(得分:1)

使用BeautifulSoup

>>> html = textabove
>>> from bs4 import BeautifulSoup as BS
>>> soup = BS(html)
>>> for ultag in soup.findAll('ul'):
...     for litag in ultag.findAll('li'):
...         print litag.text

打印哪些:

Some Keys in the UL List
Some objects in the UL LIST

获取后者<li>标记:

>>> for litag in soup.findAll('li'):
...     if litag.text.endswith('.mtx'):
...         print litag
...         
<li>_SHuassist.mtx</li>
<li>MuteX.mtx</li>
<li>Something.mtx</li>
<li>Default.mtx</li>
<li>3$5.mtx</li>

答案 1 :(得分:0)

你不需要使用正则表达式来看看python的HTMLParser

答案 2 :(得分:0)

soup.find(text ='UL LIST中的某些对象')。findNext('ul')。findAll('li')

谢谢@Haidro,你让我得到一些想法和搜索,感谢你的帮助和时间。