Что такое строка навигации (HTML)? - PullRequest
0 голосов
/ 06 января 2019

В настоящее время я пытаюсь очистить текст с веб-страниц с помощью BeautifulSoup в Python 2.7 (bs4). Мой оригинальный код выглядит следующим образом:

string = ''
a = soup.find('div',attrs={"id":"pressrelease"})
[x.extract() for x in a.findAll('script')]
[x.extract() for x in a.findAll("span", {'class':'hidden'})]

for element in a:
     try:
         string += element.get_text()

     except Exception as e: print(e)

Хотя мой код и дает мне нужный текст, он также выдает следующую ошибку: Объект 'NavigableString' не имеет атрибута 'get_text' . Я хочу реализовать функцию, которая сохраняет URL-адрес, если код попадает в исключение, но в этом случае я не хочу, чтобы URL-адрес сохранялся, поскольку, хотя он выдает исключение, страница была успешно очищена. Таким образом, я пытаюсь лучше понять, в чем именно заключается ошибка (поэтому я могу решить, следует ли целенаправленно игнорировать этот случай). Я пробовал YouTube, SO, Google, но пока ничего не нашел. В официальных документах bs4 (https://www.crummy.com/software/BeautifulSoup/bs4/doc/) есть раздел, но, честно говоря, это далеко от меня (я новичок в этом).

Любые объяснения непрофессионала о том, что такое строка навигации и почему она приводит к тому, что мой код выдает такую ​​ошибку, были бы очень благодарны!

1 Ответ

0 голосов
/ 06 января 2019

A NavigableString - это немного текста в вашем HTML-документе. См. документы . По крайней мере, один из элементов в теге, который вы искали, - это немного текста, возможно, пробел.

Строки не могут содержать текст, они являются текстом, поэтому у них нет метода get_text, и поэтому попытка вызова такого метода является ошибкой.

Вы можете проверить каждый элемент, чтобы узнать, является ли он bs4.element.Tag, прежде чем пытаться вызвать get_text() для них.

for item in a:
     if type(item) is bs4.element.Tag:
         string += item.get_text()

Примечание. Я изменил вашу итерационную переменную на item, поскольку тот факт, что вы назвали ее element, вероятно, зациклил вас на мысли, что на самом деле это элемент HTML, хотя, по крайней мере, в одном случае это определенно не .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...