获取AttributeError:'NoneType'对象没有getText属性

时间:2013-10-27 06:35:47

标签: python function beautifulsoup nonetype

我已经半编写了一个代码来从RSS提要中提取标题和链接但是会导致上述错误。获取文本时,错误在于两个函数。我想删除标题和链接标记的输入字符串。

from bs4 import BeautifulSoup
import urllib.request
import re

def getlink(a):
    a= str(a)
    bsoup=BeautifulSoup(a)
    a=bsoup.find('link').getText()
    return a

def gettitle(b):
    b=str(b)
    bsoup=BeautifulSoup(b)
    b=bsoup.find('title').getText()
    return b

webpage= urllib.request.urlopen("http://feeds.feedburner.com/JohnnyWebber?format=xml").read()

soup=BeautifulSoup(webpage)
titlesoup=soup.findAll('title')
linksoup= soup.findAll('link')

for i,j in zip(titlesoup,linksoup):
    i = getlink(i)
    j= gettitle(j)

    print (i)
    print(j)
    print ("\n")

编辑 falsetru的方法完美无缺

我还有一个问题。只需执行getText即可从任何标记中提取文本吗?

3 个答案:

答案 0 :(得分:0)

ij已经titlelink。你为什么再找到它们?

for i, j in zip(titlesoup, linksoup):
    print(i.getText())
    print(j.getText())
    print("\n")

除此之外,如果您解析xml文件,请将features='xml'传递给BeautifulSoup

soup = BeautifulSoup(webpage, features='xml')

答案 1 :(得分:0)

我预计问题出在

def getlink(a):
    ...
    a=bsoup.find('a').getText()
    ....

请记住查找匹配标记名称,没有link标记,但a标记。如果没有匹配的标记,BeautifulSoup将返回None,因此NoneType错误。查看docs了解详情。

编辑:

如果您真的在寻找文字“链接”,可以使用bsoup.find(text=re.compile('link'))

答案 2 :(得分:0)

b=bsoup.find('title')返回None

尝试检查您的输入