web-dev-qa-db-ja.com

BeautifulSoupの「findAll」と「find_all」の違い

PythonでHTMLファイルを解析したいのですが、使用しているモジュールはBeautifulSoupです。

関数find_allfindAllと同じです。私は両方を試しましたが、違うと思います:

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')

誰でも私に違いを教えてもらえますか?

25
Oberon

BeautifulSoupバージョン4では、方法はまったく同じです。大文字と小文字が混在するバージョン(findAllfindAllNextnextSiblingなど)はすべて Pythonスタイルガイド に準拠するように名前が変更されていますが、 oldの名前は、移植を容易にするために引き続き使用できます。完全なリストは メソッド名 を参照してください。

新しいコードでは、小文字のバージョンを使用する必要があるため、_find_all_などです。

ただし、あなたの例では、BeautifulSoupバージョン3を使用しています(2012年3月に廃止、しないでください助けることができればそれを使用してください)、findAll()のみが利用可能です。不明な属性名(BeautifulSoup 4でのみ使用できる_.find_all_など)は、その名前でタグを検索する場合と同様に扱われます。ドキュメントに_<find_all>_タグがないため、Noneが返されます。

51
Martijn Pieters

beautifulSoupのソースコードから:

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