beautifulsoup - 找到div内的所有li

时间:2015-08-13 20:19:46

标签: python html beautifulsoup

说我有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") 

但这不起作用

2 个答案:

答案 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。