猿问

自Linux Mint Upgrade Python 2.7.4起,Beautiful Soup

我是一个初学者,试图构建一个脚本来从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。


谁能帮我重新开始这项工作?


LEATH
浏览 181回答 3
3回答

偶然的你

Lazy1,您将其评估与解析器联系在一起。soup = bs4.BeautifulSoup(htmlbook, 'lxml')给出截短的版本,而soup = bs4.BeautifulSoup(htmlbook, 'html.parser')绝招。也许我以前的设置中没有安装lxml,所以默认将其设置为html.parser,但是lxml现在会自动安装,Reddit中有人说BS4使用lxml(如果可用)。感谢大家的建议。
随时随地看视频慕课网APP

相关分类

Python
我要回答