我已经半编写了一个代码来从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
即可从任何标记中提取文本吗?
答案 0 :(得分:0)
i
,j
已经title
,link
。你为什么再找到它们?
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
尝试检查您的输入