我是一个初学者,正在尝试构建一个脚本,从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。
任何人都可以帮助我重新开始工作吗?
答案 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。