排查AttributeError: 'ResultSet'对象没有'findAll'属性
我正在尝试从http://www.ted.com/talks这个页面提取所有演讲的名字。我使用了BeautifulSoup,下面是我的代码:
import urllib2
from BeautifulSoup import BeautifulSoup
page = urllib2.urlopen("http://www.ted.com/talks")
soup = BeautifulSoup(page)
link = soup.findAll(lambda tag: tag.name == 'a' and tag.findParent('dt', 'thumbnail'))
for anchor in link.findAll('a', title = True):
print anchor['title']
最开始的“链接”展示了八个视频的块状数组。我接着想通过这段代码提取出这些视频标题中的内容,但出现了以下错误:
for anchor in link.findAll('a', title=True):
AttributeError: 'ResultSet' object has no attribute 'findAll'
我哪里做错了呢?
2 个回答
0
为了比较,使用pyparsing的方法看起来是这样的:
from contextlib import closing
import urllib2
from pyparsing import makeHTMLTags, withAttribute
# pull HTML from web page
with closing(urllib2.urlopen("http://www.ted.com/talks")) as page:
html = page.read()
# define opening and closing tags
dt,dtEnd = makeHTMLTags("dt")
a,aEnd = makeHTMLTags("a")
# restrict <dt> tag matches to those with class='thumbnail'
dt.setParseAction(withAttribute(**{'class':'thumbnail'}))
# define pattern of <dt> tag followed immediately by <a> tag
patt = dt + a("A")
# scan input html for matches of this pattern, and access
# attributes of the <A> tag
for match,s,e in patt.scanString(html):
print match.A.title
print match.A.href
print
结果是:
Bruce Schneier: The security mirage
/talks/bruce_schneier.html
Harvey Fineberg: Are we ready for neo-evolution?
/talks/harvey_fineberg_are_we_ready_for_neo_evolution.html
Ric Elias: 3 things I learned while my plane crashed
/talks/ric_elias.html
Anil Ananthaswamy: What it takes to do extreme astrophysics
/talks/anil_ananthaswamy.html
John Hunter on the World Peace Game
/talks/john_hunter_on_the_world_peace_game.html
Kathryn Schulz: On being wrong
/talks/kathryn_schulz_on_being_wrong.html
Sam Richards: A radical experiment in empathy
/talks/sam_richards_a_radical_experiment_in_empathy.html
Susan Lim: Transplant cells, not organs
/talks/susan_lim.html
Marcin Jakubowski: Open-sourced blueprints for civilization
/talks/marcin_jakubowski.html
Roger Ebert: Remaking my voice
/talks/roger_ebert_remaking_my_voice.html
3
link
是一组 Tag
对象,你需要对它们进行遍历。举个例子:
for anchor in link:
print anchor['title']