findAll returns a list, which has no string attribute. So let's say
you have this HTML:
<html>
<head><title>A Title</title></head>
<body></body>
</html>
If you parse you should have a tree that looks like this:
html
head
title
"A Title"
body
Then you call findAll('title')
>>> title = soup.findAll('title')
>>> title
[ u"<title>A Title</title>" ]
If you instead use find you get this
>>> title = soup.find('title')
>>> title
u"<title>A Title</title>"
>>> title.string
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'list' object has no attribute 'string'
Or, if there wasn't a title tag, you would get this
>>> title = soup.find('title')
>>> type(title)
<type 'NoneType'>
You should see that AttributeError, hence my confusion.
-Aaron