ホームページ >バックエンド開発 >Python チュートリアル >BeautifulSoup の `findAll()` または `find_all()` によって返されるリストから属性値に正しくアクセスする方法は?
BeautifulSoup を使用して属性値にアクセスする
BeautifulSoup と次のコードを使用して、特定の入力タグから value 属性を抽出しようとすると、
import urllib f = urllib.urlopen("http://58.68.130.147") s = f.read() f.close() from BeautifulSoup import BeautifulStoneSoup soup = BeautifulStoneSoup(s) inputTag = soup.findAll(attrs={"name": "stainfo"}) output = inputTag['value'] print str(output)
エラーが発生します: TypeError: リストのインデックスは次のとおりである必要があります
BeautifulSoup のドキュメントでは、このようなシナリオでは文字列が問題を引き起こさないことを示唆しています。ただし、エラーはそうではないことを示しているようです。
解決策
問題は、見つかったすべての要素のリストを返す .findAll() の使用にあります。特定のタグの value 属性にアクセスするには、次のアプローチを使用する必要があります:
.findAll() の代わりに .find_all() を使用します:
.find_all() は見つかったすべての要素のリストを返しますが、.find_all() は見つかった (最初に) 1 つだけを返しますelement.
リスト内の最初の要素の value 属性にアクセスします:
BeautifulSoup は見つかった要素のリストを返すため、これが必要ですアクセスする要素のインデックスを指定します。この場合、リスト内の最初の要素の value 属性には、
output = inputTag[0]['value']
によってアクセスできます。または、 .find() を使用して最初の要素を取得します。
.find_all() を使用する代わりに、.find() を使用して直接取得できます。最初に見つかった要素:
inputTag = soup.find(attrs={"name": "stainfo"}) output = inputTag['value']
以上がBeautifulSoup の `findAll()` または `find_all()` によって返されるリストから属性値に正しくアクセスする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。