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

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

DDD
リリース: 2024-12-08 02:40:12
オリジナル
376 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート