Próbuję wyodrębnić zawartość pojedynczego atrybutu „value” w określonym tagu „input” na stronie internetowej. Używam następującego kodu:
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)
Otrzymuję TypeError: indeksy listy muszą być liczbami całkowitymi, a nie str
chociaż z dokumentacji Beautifulsoup rozumiem, że struny nie powinny tu stanowić problemu ... ale m.in. żaden specjalista i być może źle zrozumiałem.
Każda sugestia jest bardzo mile widziana! Z góry dziękuję.
python
parsing
attributes
beautifulsoup
Barnabe
źródło
źródło
output = inputTag[0].contents
inputTag[0].get('value')
zamiastinputTag[0]['value']
zapobiegać none wskaźnik w przypadku tag jako atrybut bez wartościW programie
Python 3.x
po prostu użyjget(attr_name)
na obiekcie tagu, który otrzymujesz za pomocąfind_all
:z plikiem XML,
conf//test1.xml
który wygląda następująco:wydruki:
źródło
Jeśli chcesz pobrać wiele wartości atrybutów z powyższego źródła, możesz użyć funkcji
findAll
i listy, aby uzyskać wszystko, czego potrzebujesz:źródło
Właściwie sugerowałbym oszczędzenie czasu, zakładając, że wiesz, jakie rodzaje tagów mają te atrybuty.
załóżmy, że tag xyz ma tę attritube o nazwie „staininfo” ..
Chciałbym, żebyście zrozumieli, że full_tag to lista
W ten sposób możesz pobrać wszystkie wartości attrb staininfo dla wszystkich tagów xyz
źródło
możesz również użyć tego:
źródło
Używam tego z Beautifulsoup 4.8.1, aby uzyskać wartość wszystkich atrybutów klas niektórych elementów:
Należy zauważyć, że klucz atrybutu pobiera listę, nawet jeśli atrybut ma tylko jedną wartość.
źródło