Saya ingin mencetak nilai atribut berdasarkan namanya, ambil contoh
<META NAME="City" content="Austin">
Saya ingin melakukan sesuatu seperti ini
soup = BeautifulSoup(f) //f is some HTML containing the above meta tag
for meta_tag in soup('meta'):
if meta_tag['name'] == 'City':
print meta_tag['content']
Kode di atas memberikan a KeyError: 'name'
, saya percaya ini karena nama digunakan oleh BeatifulSoup sehingga tidak dapat digunakan sebagai argumen kata kunci.
python
beautifulsoup
Ruth
sumber
sumber
soup.findAll("meta", {"name":"City"})['content']
. Ini akan mengembalikan semua kejadian.u
diu'Austin
?yang paling keras menjawab pertanyaan itu tetapi berikut ini cara lain untuk melakukan hal yang sama. Juga, Dalam contoh Anda, Anda memiliki NAME dalam huruf besar dan dalam kode Anda memiliki nama dalam huruf kecil.
s = '<div class="question" id="get attrs" name="python" x="something">Hello World</div>' soup = BeautifulSoup(s) attributes_dictionary = soup.find('div').attrs print attributes_dictionary # prints: {'id': 'get attrs', 'x': 'something', 'class': ['question'], 'name': 'python'} print attributes_dictionary['class'][0] # prints: question print soup.find('div').get_text() # prints: Hello World
sumber
6 tahun terlambat ke pesta tetapi saya telah mencari cara mengekstrak nilai atribut tag elemen html , jadi untuk:
<span property="addressLocality">Ayr</span>
Saya ingin "addressLocality". Saya terus diarahkan kembali ke sini, tetapi jawabannya tidak benar-benar menyelesaikan masalah saya.
Bagaimana saya berhasil melakukannya pada akhirnya:
>>> from bs4 import BeautifulSoup as bs >>> soup = bs('<span property="addressLocality">Ayr</span>', 'html.parser') >>> my_attributes = soup.find().attrs >>> my_attributes {u'property': u'addressLocality'}
Karena ini dikt, Anda juga dapat menggunakan
keys
dan 'nilai'>>> my_attributes.keys() [u'property'] >>> my_attributes.values() [u'addressLocality']
Semoga membantu orang lain!
sumber
Karya-karya berikut:
from bs4 import BeautifulSoup soup = BeautifulSoup('<META NAME="City" content="Austin">', 'html.parser') metas = soup.find_all("meta") for meta in metas: print meta.attrs['content'], meta.attrs['name']
sumber
jawaban theharshest adalah solusi terbaik, tetapi FYI masalah yang Anda hadapi berkaitan dengan fakta bahwa objek Tag di Beautiful Soup bertindak seperti kamus Python. Jika Anda mengakses tag ['name'] pada tag yang tidak memiliki atribut 'name', Anda akan mendapatkan KeyError.
sumber
Anda juga dapat mencoba solusi ini:
Untuk mencari nilai yang ditulis dalam span of table
htmlContent
<table> <tr> <th> ID </th> <th> Name </th> </tr> <tr> <td> <span name="spanId" class="spanclass">ID123</span> </td> <td> <span>Bonny</span> </td> </tr> </table>
Kode Python
soup = BeautifulSoup(htmlContent, "lxml") soup.prettify() tables = soup.find_all("table") for table in tables: storeValueRows = table.find_all("tr") thValue = storeValueRows[0].find_all("th")[0].string if (thValue == "ID"): # with this condition I am verifying that this html is correct, that I wanted. value = storeValueRows[1].find_all("span")[0].string value = value.strip() # storeValueRows[1] will represent <tr> tag of table located at first index and find_all("span")[0] will give me <span> tag and '.string' will give me value # value.strip() - will remove space from start and end of the string. # find using attribute : value = storeValueRows[1].find("span", {"name":"spanId"})['class'] print value # this will print spanclass
sumber
If tdd='<td class="abc"> 75</td>' In Beautifulsoup if(tdd.has_attr('class')): print(tdd.attrs['class'][0]) Result: abc
sumber