web-dev-qa-db-fra.com

Différence entre "Findall" et "Find_All" dans BeautifulSoup

Je voudrais analyser un fichier HTML avec Python et que le module que j'utilise est magnifique.

On dit que la fonction find_all est identique à findAll. J'ai essayé les deux, mais je crois qu'ils sont différents:

import urllib, urllib2, cookielib
from BeautifulSoup import *
site = "http://share.dmhy.org/topics/list?keyword=TARI+TARI+team_id%3A407"

rqstr = urllib2.Request(site)
rq = urllib2.urlopen(rqstr)
fchData = rq.read()

soup = BeautifulSoup(fchData)

t = soup.findAll('tr')

Quelqu'un peut-il me dire la différence?

25
Oberon

Dans la version 4 version 4, les méthodes sont exactement les mêmes; Les versions mixtes (findAll, findAllNext, nextSibling, etc.) ont tous été renommés pour se conformer au Guide de style Python , mais Le Old Les noms sont toujours disponibles pour faciliter le portage. Voir noms de méthodes pour une liste complète.

Dans le nouveau code, vous devez utiliser les versions minuscules, donc find_all, Etc.

Dans votre exemple, vous utilisez BEAUMESUP Version 3 (Discontinue depuis mars 2012, non Utilisez-le si vous pouvez l'aider), où seulement findAll() est disponible. Les noms d'attributs inconnus (tels que .find_all, Qui est disponible uniquement dans Beautifulsoup 4) sont traités comme si vous recherchez une balise par ce nom. Il n'y a pas de balise <find_all> Dans votre document, alors None est renvoyé pour cela.

51
Martijn Pieters

du code source de belle-passoup:

http://bazaar.launchpad.net/~leonardr/Beautifulsoup/bs4/view/head:/bs4/element.py#l126

def find_all(self, name=None, attrs={}, recursive=True, text=None,
                 limit=None, **kwargs):
# ...
# ...

findAll = find_all       # BS3
findChildren = find_all  # BS2
5
kmonsoor