Czy wiesz, dlaczego pierwszy przykład w samouczku BeautifulSoup http://www.crummy.com/software/BeautifulSoup/documentation.html#QuickStart podaje AttributeError: 'NavigableString' object has no attribute 'name'
? Według this answer znaki spacji w kodzie HTML powodują problem. Próbowałem ze źródłami kilku stron i 1 działałem, gdy inni podawali ten sam błąd (usunąłem spacje). Czy możesz wyjaśnić, do czego odnosi się "nazwa" i dlaczego pojawia się ten błąd? Dzięki.BeautifulSoup: AttributeError: Obiekt "NavigableString" nie ma atrybutu "nazwa"
Odpowiedz
name
będzie odnosić się do nazwy tagu, jeśli obiekt jest Tag
obiekt (tj: <html>
name = „html”)
jeśli masz spacji znaczników w między węzłami BeautifulSoup zamieni ci w NavigableString
. Więc jeśli użyjesz indeksu contents
do przechwytywania węzłów, możesz pobrać NavigableString
zamiast następnego Tag
.
Aby tego uniknąć, zapytanie dla węzła szukasz: Searching the Parse Tree
lub jeśli znasz nazwę następnego tagu chcesz, możesz użyć tej nazwy jako własność i powróci pierwsza Tag
z tą nazwą lub jeśli nie None
dzieci z tą nazwą istnieje: Using Tag Names as Members
Jeśli chcesz użyć contents
trzeba sprawdzić obiekty, które pracują z. Błąd otrzymujesz po prostu oznacza, że próbujesz uzyskać dostęp do właściwości name, ponieważ kod zakłada, że to Tag
Można użyć try catch, aby wyeliminować przypadki Żeglowny String jest analizowany w pętli, podobnie jak to:
for j in soup.find_all(...)
try:
print j.find(...)
except NavigableString:
pass
zignoruj NavigableString
obiektów podczas iteracja drzewa:
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
for body_child in soup.body.children:
if isinstance(body_child, NavigableString):
continue
if isinstance(body_child, Tag):
print(body_child.name)
- 1. AttributeError: obiekt 'NoneType' nie ma atrybutu 'rozłam'
- 2. AttributeError: Obiekt "Ustawienia" nie ma atrybutu "ROOT_URLCONF"
- 3. AttributeError: obiekt „RegexURLResolver” nie ma atrybutu „_urlconf_module”
- 4. AttributeError: "długi" obiekt nie ma atrybutu "fetchall"
- 5. AttributeError: "str" obiekt nie ma atrybutu "dekodowanie"
- 6. AttributeError: Obiekt 'Namespace' nie ma atrybutu
- 7. AttributeError: Obiekt "FreqDist" nie ma atrybutu "inc"
- 8. Python AttributeError: Obiekt nie ma atrybutu
- 9. AttributeError: Obiekt "Class" nie ma atrybutu "a"
- 10. AttributeError: Obiekt 'module' nie ma atrybutu 'maketrans'
- 11. AttributeError: obiekt 'module' nie ma atrybutu
- 12. AttributeError: "krotka" obiekt nie ma atrybutu "startswith"
- 13. AttributeError: Obiekt 'int' nie ma atrybutu '_sa_instance_state'
- 14. AttributeError: obiekt „DataFrame” nie ma atrybutu „mapy”
- 15. AttributeError: Obiekt 'Context' nie ma atrybutu 'wrap_socket'
- 16. AttributeError: 'tuple' obiekt nie ma atrybutu 'write'
- 17. AttributeError: obiekt '_MainProcess' nie ma atrybutu '_exiting'
- 18. AttributeError: Obiekt 'module' nie ma atrybutu 'setdefaultencoding'
- 19. graph.write_pdf ("iris.pdf") AttributeError: 'list' obiekt nie ma atrybutu "write_pdf"
- 20. Python + Regex: AttributeError: Obiekt "NoneType" nie ma atrybutu "groups"
- 21. Django annotate() Błąd AttributeError: obiekt 'Charfield' nie ma atrybutu 'resolve_expression'
- 22. Python: AttributeError: Obiekt "_io.TextIOWrapper" nie ma atrybutu "podzielony"
- 23. AttributeError: Obiekt "moduł" nie ma atrybutu "małe litery"
- 24. Mac OSX - AttributeError: obiekt 'FigureCanvasMac' nie ma atrybutu 'restore_region'
- 25. pandy v0.17.0: AttributeError: obiekt 'unicode' nie ma atrybutu 'version'
- 26. sqlalchemy, AttributeError: 'krotki' obiekt nie ma atrybutu 'foreign_keys'
- 27. Anaconda3 - AttributeError: obiekt "dict" nie ma atrybutu "rsplit"
- 28. AttributeError: Obiekt 'list' nie ma atrybutu "kliknij" - Selenium Webdriver
- 29. AttributeError: obiekt 'module' (scipy) nie ma atrybutu 'misc'
- 30. Python 'AttributeError: obiekt' function 'nie ma atrybutu' min ''
.find_all() pojawia się tylko powrócić tagów dziecko i ignoruje spacje ... –