Python Beautiful Soup 'NoneType'对象错误

4
我正在使用Beautiful Soup来获取网页正文中的超链接。以下是我使用的代码:

import urllib2
from bs4 import BeautifulSoup

url = 'http://www.1914-1918.net/swb.htm'
element = 'body'
request = urllib2.Request(url)
page = urllib2.urlopen(request).read()
pageSoup = BeautifulSoup(page)
for elementSoup in pageSoup.find_all(element):
  for linkSoup in elementSoup.find_all('a'):
    print linkSoup['href']

我在尝试查找swb.htm页面的超链接时遇到了AttributeError错误。

AttributeError: 'NoneType'对象没有'next_element'属性

我确定在body元素下有一个或几个'a'元素。但是奇怪的是,它在其他页面(例如http://www.1914-1918.net/1div.htm)中运行良好。

这个问题困扰我已经几天了。请问有人能指出我做错了什么吗?

截图

enter image description here


1
我不明白。在编辑后,你的代码反映了@Hal的答案。你的代码到底是哪一个,是这个编辑后的还是之前的? - WGS
我对我的代码进行了后编辑。@Hal指出的打印问题是一个笔误。对于所有的困惑,我感到很抱歉。 - WeimusT
请检查您是否使用了最新的BeautifulSoup版本和Python 2.7.6。我在这方面没有遇到任何问题,可以看到您的截图中使用的是Python 2.7,但请尝试检查一下它是否是2.7.5+。 :) - WGS
顺便说一下,在Ubuntu上运行Python时应该使用virtualenv。我使用的是Ubuntu 13.10,同时使用2.7.6的虚拟环境和内置的2.7.5+系统Python,这两个都可以正常工作。奇怪的是对于你来说3.x能够正常工作。好吧,祝你好运。 :) - WGS
我相信这仍然是BeautifulSoup中的一个未解决的bug:https://bugs.launchpad.net/beautifulsoup/+bug/1270611 - Garrett
显示剩余2条评论
3个回答

3
您的打印结果有误。正确应该是:
import urllib2
from bs4 import BeautifulSoup

url = 'http://www.1914-1918.net/swb.htm'
element = 'body'
request = urllib2.Request(url)
page = urllib2.urlopen(request).read()
pageSoup = BeautifulSoup(page)
for elementSoup in pageSoup.find_all(element):
  for linkSoup in elementSoup.find_all('a'):
    print linkSoup['href']

对我来说,这返回了许多链接。

抱歉,打印错误是一个笔误。我附上了截图。仍然出现了NoneType错误。 - WeimusT
奇怪,我的代码完美运行。你使用的是哪个版本的Python? - João Pereira
我猜可能是Python版本引起了这个问题。我正在使用的是Python 2.7.3和Ubuntu 12.04。 - WeimusT

1

-1
也许beautifulsoup4不适合你的Python版本,可以尝试移除beautifulsoup4:pip uninstall beautifulsoup4,然后安装旧版本:pip install beautifulsoup4==<version>,我使用的是4.1.3版本。

永远不要尝试回退到旧版本,除非这是一个非常好的并且需要文档记录的错误。 - Alexandru R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接