删除<div>和<href> Beautifulsoup </href> </div>之间的内容

时间:2013-08-26 13:30:42

标签: python html beautifulsoup

我有一段代码来解析网页。我想删除div,ahref,h1之间的所有内容。

opener = urllib2.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
url = "http://en.wikipedia.org/wiki/Viscosity"
try:
  ourUrl = opener.open(url).read()
except Exception,err:
  pass
soup = BeautifulSoup(ourUrl)                
dem = soup.findAll('p')     

for i in dem:
  print i.text

我想打印h1,ahref之间没有任何内容的文本,如上所述。

1 个答案:

答案 0 :(得分:1)

编辑:从评论“我想要返回不在<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's `urllib2`: Why do I get error 403 when I `urlopen` a Wikipedia page?

使用以下代码行可以避免这种情况

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]   粘度是由于以不同速度移动的相邻流体包裹之间的摩擦。当流体被迫通过管道时,流体通常在轴线附近移动得更快并且在墙壁附近非常缓慢,因此需要一些应力(例如管道两端之间的压力差)来克服层间的摩擦并保持流动的。对于相同的速度模式,所需的应力与流体的粘度成比例。液体的粘度取决于颗粒的大小和形状以及颗粒之间的吸引力。[引证需要]