如何使用BeautifulSoup&amp ;;解析网站的词汇表部分剥离HTML标记

时间:2011-09-29 00:30:56

标签: html parsing tags beautifulsoup

我正在尝试解析此页面 http://www.lib.uts.edu.au/about-uts-library/corporate-information/library-glossary 并获得

标题, 描述

每个部分

就是这样,没有标签。 我解析了该页面并尝试搜索所有<title><p>标记,但它不会产生正确的结果。

我使用的是Python 2.7和BeautifulSoup 3-2-0

以下是我的代码示例:

import urllib2, sys
address = sys.argv[1]
html = urlib2.urlopen(http://www.lib.uts.edu.au/about-uts-library/corporate-information/library-glossary).read()
from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(html)
def printText(tags):
        for tag in tags:
                if tag._class_==NavigableString:
                        print tag,
                else:
                        printText(tag)
        print ""
printText(soup.findALL("p"))
print "".join(soup.findALL("p", text=re.compile(".")))

1 个答案:

答案 0 :(得分:0)

我不完全确定您在寻找什么,但我怀疑您希望从此页面中获取术语和定义。正在寻找&lt; title&gt;和&lt; p&gt;标签并不是你真正需要的。您应该查找使标记唯一的属性。在这种情况下,查看&lt; span&gt;标记显示有一个唯一标记术语的类属性。这可用于隔离您需要的部分。我建议更仔细地查看find / findAll的文档。下面是一些代码,可以帮助您完成大部分工作。

from BeautifulSoup import BeautifulSoup
import urllib

url = 'http://www.lib.uts.edu.au/about-uts-library/corporate-information/library-glossary'
soup = BeautifulSoup(urllib.urlopen(url))

paragraphs = [x.parent for x in soup.findAll(name='span',attrs={'class':'definition'}) if x.parent.name == 'p']
for p in paragraphs:
    name = p.find(name='span',attrs={'class':'definition'}).text
    text = p.text.replace(name,'')
    print '-'*80
    print name
    print text