2

此代码生成 NoneType 对象错误。“print(soup.get_text())”被指示为问题。我该如何解决?

import urllib
from BeautifulSoup import BeautifulSoup

base_url = "http://www.galactanet.com/oneoff/theegg_mod.html"

url = (base_url)
content = urllib.urlopen(url)
soup = BeautifulSoup(content)
print(soup.get_text())
4

3 回答 3

1

您使用的是 Python 2,而不是 Python 3。从您 using 可以明显看出这一点urllib.urlopen(url),这在 Python 3 中不起作用。

此外,您还安装了 BeautifulSoup 3,这是一个旧版本,不适用于 Python 3。

但是,您正在阅读 BeautifulSoup 4 的文档。

解决方案:安装 BeautifulSoup4,并将导入行更改为

from bs4 import BeautifulSoup

你很高兴。

于 2013-08-08T21:24:52.377 回答
0

问题是线路

content = urllib.urlopen(url)

它应该是

content = urllib.urlopen(url).read()

这是一个使用 BeautifulSoup4 的示例。

import bs4 
import urllib
url = raw_input("Enter url - ")
html = urllib.urlopen(url).read()
soup = bs4.BeautifulSoup(html)
tags = soup('a')
for tag in tags:
    print tag.get('href',None)
于 2016-06-17T07:11:59.260 回答
0

对于那些使用 Python 2.7 和 BeautifulSoup 3 的人来说,这里有一个函数,其目标是尽可能多地刮掉绒毛并坚持文本内容:

from django.utils.html import escape
from django.utils.text import Truncator

from BeautifulSoup import MinimalSoup, CData, Comment, Declaration, ProcessingInstruction, \
    BeautifulStoneSoup

...

def get_text(self):
    soup = MinimalSoup(self.htmlxml, convertEntities=BeautifulStoneSoup.ALL_ENTITIES)
    comments = soup.findAll(text=lambda text: isinstance(text, Comment))
    [comment.extract() for comment in comments]
    cdatas = soup.findAll(text=lambda text: isinstance(text, CData))
    [cdata.extract() for cdata in cdatas]
    decls = soup.findAll(text=lambda text: isinstance(text, Declaration))
    [decl.extract() for decl in decls]
    pis = soup.findAll(text=lambda text: isinstance(text, ProcessingInstruction))
    [pi.extract() for pi in pis]
    return Truncator(escape(re.sub('\n', '', re.sub('<.*?>', '', soup.renderContents())))).chars(limit)
于 2016-09-29T22:33:08.643 回答