Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Mengakses Nilai Atribut dengan Betul daripada Senarai yang Dikembalikan oleh `findAll()` atau `find_all()` BeautifulSoup?
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:
Gunakan .find_all() dan bukannya .findAll():
.find_all() mengembalikan senarai semua elemen yang ditemui, manakala .find_all() hanya mengembalikan satu (pertama) ditemui elemen.
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']
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!