说我有html代码
<li> ... </li>
<li> ... </li>
<div class="one">
<ul class = "two">
<li> ... </li>
<li> ... </li>
<li> ... </li>
<li> ... </li>
</ul>
</div>
我如何找到div标签中的所有li属性,但不是在div标签之外?
data = soup.find_all("div", {"class": "one"}).find_all("li")
但这不起作用
答案 0 :(得分:2)
Beautiful Soup支持最常用的CSS选择器。只需将字符串传递给
即可.select
方法
In [25]: soup = BS("""<li> ... </li>
<li> ... </li>
<div class="one">
<ul class = "two">
<li> ... </li>
<li> ... </li>
<li> ... </li>
<li> ... </li>
</ul>
</div>""")
In [26]: soup.select("div ul")
Out[26]:
[<ul class="two">
<li> ... </li>
<li> ... </li>
<li> ... </li>
<li> ... </li>
</ul>]
答案 1 :(得分:0)
你可以使用xpath
模块构建一个lxml
选择器(你很可能已经安装过,因为你正在使用BS),如下所示:
from lxml import etree
root = etree.fromstring(html_string)
items = root.xpath('.//div[@class="one"]/descendant::li')
缺点(或者可能是一个好处?)xml_string
需要是一个有效的HTML。