自Linux Mint Upgrade Python 2.7.4以来,Beautiful Soup已经停止工作

时间:2013-06-09 13:21:14

标签: python beautifulsoup

我是一个初学者,正在尝试构建一个脚本,从Project Gutenberg中提取电子书,将其分为章节和段落,然后对文本进行一些基本分析。

我能够可靠地找到章节标题,因为它们很方便地使用'h2'标签。但是,从Linux Mint Nadia升级到Olivia后,只检测到前几个标签。

reddit的一些优秀人员一直在努力帮助,但我们走到了尽头。但是,我们所使用的诊断程序可能很有用。

>>> import bs4
>>> from urllib import urlopen
>>> url = "http://www.gutenberg.org/files/82/82-h/82-h.htm"
>>> newtext = urlopen(url).read()
>>> soup = bs4.BeautifulSoup(newtext)
>>> def chap_list (htmlbook):
    print 'A:', len(htmlbook)
    soup = bs4.BeautifulSoup(htmlbook)
    print 'B:', len(soup)
    chapters = soup('h2')
    print 'C:', chapters
    return

>>> chap_list(newtext)

对我来说,这会返回:

A: 1317420
B: 2
C: [<h2>
      A ROMANCE
    </h2>, <h2>
      By Sir Walter Scott
    </h2>, <h2>
      INTRODUCTION TO IVANHOE.
    </h2>, <h2>
      DEDICATORY EPISTLE
    </h2>]

此外,现在当我简单地按照上面的定义调用汤对象时,只返回本书的第一部分 - 最多为“居住在城堡门,约克”。我确定这用来返回整个文本。因此,我的评估是,BS不再涉及整个文本。

版本: Python 2.74 BeautifulSoup 4.2.1 lxml 3.1.0

当一切正常时,我不知道我正在使用的版本。尝试在Python 3.3下运行得到了相同的结果。我需要使用2.7,因为我稍后想要nltk。

任何人都可以帮助我重新开始工作吗?

1 个答案:

答案 0 :(得分:0)

我用BeautifulSoup 3尝试了这个代码,它似乎有效:

In [1]: import BeautifulSoup
In [2]: from urllib import urlopen
In [3]: html = urlopen('http://www.gutenberg.org/files/82/82-h/82-h.htm').read()
In [4]: soup = BeautifulSoup.BeautifulSoup(html)
In [5]: len(soup('h2'))
Out [5]: 58

请注意,版本4使用了different HTML parser,我记得在某处可以看到3版本可以处理更多内容。也许您可以尝试使用不同的HTML解析器进行版本4。