Beautifulsoup在保留秩序的同时找到不同的部分

时间:2015-11-10 17:38:41

标签: python python-2.7 beautifulsoup

我希望使用beutifulsouop在span部分中提取具有特定class值的文本,并使用div部分提取具有不同class值的文本,同时保留顺序。

以下工作,但不保留订单[即该列表最后包含所有div个元素,而不是它们出现在页面中的时间

extract = soup.findAll('span', {"class": "value1"})  
extract += soup.findAll('div', {"class": "value2"})

注意 - 这与问题BeautifulSoup findAll() given multiple classes?略有不同,因为我专门查看spandiv代码。

1 个答案:

答案 0 :(得分:3)

没有什么可以防止过滤掉错误的标签。扩展你提到的答案:

from bs4 import BeautifulSoup
soup = BeautifulSoup('<html><body><div class="class1"></div><i class="class1"></i><span class="class2"></span><div class="class1"></div></body></html>')
for e in soup.findAll(True, {"class":["class1", "class2"]}):
    if e.name in ("div", "span"):
        print e

过滤器也可以写成一行:

[e for e in soup.findAll(True, {"class":["class1", "class2"]}) if e.name in ("div", "span")]
顺便说一下,即使这样也行不通:

 soup.findAll(["div", "span"], {"class":["class1", "class2"]})

有关可以找到所有内容的第一个参数的文档,请参阅http://www.crummy.com/software/BeautifulSoup/bs4/doc/#the-name-argument