环境:
美丽的汤4
Python 2.7.5
逻辑:
'find_all'<li>
个<ul>
范围内my_class
类的实例,例如:
<ul class='my_class'>
<li>thing one</li>
<li>thing two</li>
</ul>
澄清:只需获取<li>
标记之间的“文字”即可。
Python代码:
(下面的find_all不正确,我只是把它放在上下文中)
from bs4 import BeautifulSoup, Comment
import re
# open original file
fo = open('file.php', 'r')
# convert to string
fo_string = fo.read()
# close original file
fo.close()
# create beautiful soup object from fo_string
bs_fo_string = BeautifulSoup(fo_string, "lxml")
# get rid of html comments
my_comments = bs_fo_string.findAll(text=lambda text:isinstance(text, Comment))
[my_comment.extract() for my_comment in my_comments]
my_li_list = bs_fo_string.find_all('ul', 'my_class')
print my_li_list
答案 0 :(得分:10)
此?
>>> html = """<ul class='my_class'>
... <li>thing one</li>
... <li>thing two</li>
... </ul>"""
>>> from bs4 import BeautifulSoup as BS
>>> soup = BS(html)
>>> for ultag in soup.find_all('ul', {'class': 'my_class'}):
... for litag in ultag.find_all('li'):
... print litag.text
...
thing one
thing two
soup.find_all('ul', {'class': 'my_class'})
找到ul
类的所有my_class
代码。
然后,我们会在这些li
代码中找到所有ul
代码,并打印代码的内容。
答案 1 :(得分:2)
这就是使用BeautifulSoup3的技巧,在这台机器上没有4个。
>>> [li.string for li in bs_fo_string.find('ul', {'class': 'my_class'}).findAll('li')]
[u'thing one', u'thing two']
我们的想法是首先搜索带有'my_class'类的ul,然后在那个ul中找到所有的li。
如果你有同一个类的额外ul,你可能也想在ul搜索上使用findAll,并将列表理解更改为嵌套。