【发布时间】:2014-09-15 10:12:00
【问题描述】:
这里是lxml,保存为sample.html。
<html>
<body>
<div class ="ecopyramid">
<ul id ="producers">
<li class ="producerlist">
<div class ="name">A1</div>
<div class ="number">100000</div>
</li>
<li class ="producerlist">
<div class ="name">B1</div>
<div class ="number">100000</div>
</li>
</ul>
<ul id ="primaryconsumers">
<li class ="primaryconsumerlist">
<div class ="name">A2</div>
<div class ="number">1000</div>
</li>
<li class ="primaryconsumerlist">
<div class ="name">B2</div>
<div class ="number">2000</div>
</li>
</ul>
<ul id ="secondaryconsumers">
<li class ="secondaryconsumerlist">
<div class ="name">A3</div>
<div class ="number">100</div>
</li>
<li class ="secondaryconsumerlist">
<div class ="name">B3</div>
<div class ="number">98</div>
</li>
</ul>
<ul id ="tertiaryconsumers">
<li class ="tertiaryconsumerlist">
<div class ="name">A4</div>
<div class ="number">80</div>
</li>
<li class ="tertiaryconsumerlist">
<div class ="name">B4</div>
<div class ="number">50</div>
</li>
</ul>
</body>
</html>
以下是浏览上述 sample.html 的代码:
from bs4 import BeautifulSoup
with open("sample.html", "r") as sample_pyramid:
soup=BeautifulSoup(sample_pyramid, "lxml")
soup_object = soup.find("ul", id="secondaryconsumers")
print soup_object.li.div.string
因此,在这段代码中,我可以首先通过标签“ul”和 id “secondaryconsumers”指定文本“A3”的父位置,然后在打印命令中通过“.li.div”进一步指定.string" 后缀并输出所需的 "A3" 文本。我的问题如下:
1) 在本例中,我如何编写代码以调用/打印文本“B3”?
2) 在本例中,我如何编码以调用/打印文本“98”(“B3”下方)?
我尝试了很多都没有成功,我可以通过导航调用第一个文本对象,但不能调用共享标签中的第二个文本对象。
有什么想法吗?
【问题讨论】:
标签: python python-2.7 html-parsing beautifulsoup text-extraction