Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Mengakses Nilai Atribut dengan Betul daripada Senarai yang Dikembalikan oleh `findAll()` atau `find_all()` BeautifulSoup?

Bagaimana untuk Mengakses Nilai Atribut dengan Betul daripada Senarai yang Dikembalikan oleh `findAll()` atau `find_all()` BeautifulSoup?

DDD
DDDasal
2024-12-08 02:40:12377semak imbas

How to Correctly Access Attribute Values from a List Returned by BeautifulSoup's `findAll()` or `find_all()`?

Mengakses Nilai Atribut dengan BeautifulSoup

Apabila cuba mengekstrak atribut nilai daripada teg input tertentu menggunakan BeautifulSoup dan kod berikut:

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)

ralat berlaku: TypeError: senarai indeks mestilah integer, bukan str.

Dokumentasi BeautySoup mencadangkan bahawa rentetan tidak sepatutnya menimbulkan masalah dalam senario sedemikian. Walau bagaimanapun, ralat nampaknya menunjukkan sebaliknya.

Penyelesaian

Isunya terletak pada penggunaan .findAll(), yang mengembalikan senarai semua elemen yang ditemui. Untuk mengakses atribut nilai teg tertentu, seseorang harus menggunakan pendekatan berikut:

  1. Gunakan .find_all() dan bukannya .findAll():

    .find_all() mengembalikan senarai semua elemen yang ditemui, manakala .find_all() hanya mengembalikan satu (pertama) ditemui elemen.

  2. Akses atribut nilai elemen pertama dalam senarai:

    Memandangkan BeautifulSoup mengembalikan senarai elemen yang ditemui, adalah perlu untuk menentukan indeks elemen yang anda ingin akses. Dalam kes ini, atribut nilai elemen pertama dalam senarai boleh diakses oleh:

    output = inputTag[0]['value']
  3. Sebagai alternatif, gunakan .find() untuk mendapatkan elemen pertama:

    Daripada menggunakan .find_all(), .find() boleh digunakan untuk mendapatkan terus yang pertama dijumpai elemen:

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

Atas ialah kandungan terperinci Bagaimana untuk Mengakses Nilai Atribut dengan Betul daripada Senarai yang Dikembalikan oleh `findAll()` atau `find_all()` BeautifulSoup?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn