编辑:来自评论“我想返回不在任何<div>
和</div>
标签之间的文本。”。这应该去除父级具有 div 标签的所有块:
raw = '''
<html>
Text <div> Avoid this </div>
<p> Nested <div> Don't get me either </div> </p>
</html>
'''
def check_for_div_parent(mark):
mark = mark.parent
if 'div' == mark.name:
return True
if 'html' == mark.name:
return False
return check_for_div_parent(mark)
soup = bs4.BeautifulSoup(raw)
for text in soup.findAll(text=True):
if not check_for_div_parent(text):
print text.strip()
这导致只有两个标签,忽略 div 的:
Text
Nested
原始回复
目前还不清楚你到底想做什么。首先,您应该尝试发布一个完整的工作示例,因为您似乎缺少标题。其次,维基百科似乎反对“机器人”或自动下载器
Python的`urllib2`:当我`urlopen`维基百科页面时,为什么会出现错误403?
这可以通过以下代码行来避免
import urllib2, bs4
url = r"http://en.wikipedia.org/wiki/Viscosity"
req = urllib2.Request(url, headers={'User-Agent' : "Magic Browser"})
con = urllib2.urlopen( req )
现在我们有了页面,我想您只想使用bs4
. 我会做这样的事情
soup = bs4.BeautifulSoup(con.read())
start_pos = soup.find('h1').parent
for p in start_pos.findAll('p'):
para = ''.join([text for text in p.findAll(text=True)])
print para
这给了我看起来像这样的文本:
流体的粘度是其对剪切应力或拉伸应力逐渐变形的抵抗力的量度。对于液体,它对应于“厚度”的非正式概念。例如,蜂蜜的粘度比水高。 [1] 粘度是由于以不同速度移动的相邻流体块之间的摩擦造成的。当流体被迫通过管子时,流体通常在靠近轴线处移动得更快,而在靠近壁面处移动得非常慢,因此需要一些应力(例如管子两端之间的压力差)来克服层间摩擦并保持流体移动。对于相同的速度模式,所需的应力与流体的粘度成正比。液体的粘度取决于其颗粒的大小和形状以及颗粒之间的吸引力。