Chcę wydrukować wartość atrybutu na podstawie jego nazwy, na przykład
<META NAME="City" content="Austin">
Chcę zrobić coś takiego
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']
Powyższy kod daje KeyError: 'name'
, myślę, że dzieje się tak, ponieważ nazwa jest używana przez BeatifulSoup, więc nie może być używana jako argument słowa kluczowego.
python
beautifulsoup
Litość
źródło
źródło
soup.findAll("meta", {"name":"City"})['content']
. Spowoduje to zwrócenie wszystkich wystąpień.u
wu'Austin
środku?najostrzej odpowiedział na pytanie, ale oto inny sposób na zrobienie tego samego. Ponadto, w twoim przykładzie masz NAZWĘ pisane wielkimi literami, aw kodzie masz imię zapisane małymi literami.
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
źródło
6 lat spóźniłem się na imprezę, ale szukałem, jak wyodrębnić wartość atrybutu tagu elementu html , więc:
<span property="addressLocality">Ayr</span>
Chcę „addressLocality”. Wciąż kierowano mnie tutaj, ale odpowiedzi tak naprawdę nie rozwiązały mojego problemu.
Jak ostatecznie udało mi się to zrobić:
>>> 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'}
Ponieważ jest to dyktando, możesz również użyć
keys
i „wartości”>>> my_attributes.keys() [u'property'] >>> my_attributes.values() [u'addressLocality']
Miejmy nadzieję, że pomoże to komuś innemu!
źródło
Następujące prace:
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']
źródło
odpowiedź theharshest jest najlepszym rozwiązaniem, ale napotkany problem związany jest z faktem, że obiekt Tag w Beautiful Soup działa jak słownik Pythona. Jeśli uzyskasz dostęp do tagu ['name'] w tagu, który nie ma atrybutu 'name', otrzymasz KeyError.
źródło
Można też wypróbować takie rozwiązanie:
Aby znaleźć wartość, która jest zapisana w przedziale tabeli
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>
Kod Pythona
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
źródło
If tdd='<td class="abc"> 75</td>' In Beautifulsoup if(tdd.has_attr('class')): print(tdd.attrs['class'][0]) Result: abc
źródło