ホームページ >バックエンド開発 >Python チュートリアル >BeautifulSoup の `findAll()` または `find_all()` によって返されるリストから属性値に正しくアクセスする方法は?

BeautifulSoup の `findAll()` または `find_all()` によって返されるリストから属性値に正しくアクセスする方法は?

DDD
DDDオリジナル
2024-12-08 02:40:12380ブラウズ

How to Correctly Access Attribute Values from a List Returned by BeautifulSoup's `findAll()` or `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 属性にアクセスするには、次のアプローチを使用する必要があります:

  1. .findAll() の代わりに .find_all() を使用します:

    .find_all() は見つかったすべての要素のリストを返しますが、.find_all() は見つかった (最初に) 1 つだけを返しますelement.

  2. リスト内の最初の要素の value 属性にアクセスします:

    BeautifulSoup は見つかった要素のリストを返すため、これが必要ですアクセスする要素のインデックスを指定します。この場合、リスト内の最初の要素の value 属性には、

    output = inputTag[0]['value']
  3. によってアクセスできます。または、 .find() を使用して最初の要素を取得します。

    .find_all() を使用する代わりに、.find() を使用して直接取得できます。最初に見つかった要素:

    inputTag = soup.find(attrs={"name": "stainfo"})
    output = inputTag['value']

以上がBeautifulSoup の `findAll()` または `find_all()` によって返されるリストから属性値に正しくアクセスする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。