Difference between "findAll" and "find_all" in BeautifulSoup
from the source code of BeautifulSoup:
http://bazaar.launchpad.net/~leonardr/beautifulsoup/bs4/view/head:/bs4/element.py#L1260
def find_all(self, name=None, attrs={}, recursive=True, text=None,
limit=None, **kwargs):
# ...
# ...
findAll = find_all # BS3
findChildren = find_all # BS2
In BeautifulSoup version 4, the methods are exactly the same; the mixed-case versions (findAll
, findAllNext
, nextSibling
, etc.) have all been renamed to conform to the Python style guide, but the old names are still available to make porting easier. See Method Names for a full list.
In new code, you should use the lowercase versions, so find_all
, etc.
In your example however, you are using BeautifulSoup version 3 (discontinued since March 2012, don't use it if you can help it), where only findAll()
is available. Unknown attribute names (such as .find_all
, which only is available in BeautifulSoup 4) are treated as if you are searching for a tag by that name. There is no <find_all>
tag in your document, so None
is returned for that.