soup.find("tagName", { "id" : "articlebody" })
Почему это НЕ возвращает <div id="articlebody"> ... </div>
теги и прочее между ними? Ничего не возвращает И я точно знаю, что он существует, потому что я смотрю прямо на него с
soup.prettify()
soup.find("div", { "id" : "articlebody" })
тоже не работает.
( РЕДАКТИРОВАТЬ: я обнаружил, что BeautifulSoup неправильно анализировал мою страницу, что, вероятно, означало, что страница, которую я пытался проанализировать, не отформатирована должным образом в SGML или чем-то еще)
python
beautifulsoup
Тони Старк
источник
источник
Ответы:
Вы должны опубликовать свой пример документа, потому что код работает нормально:
Поиск
<div>
s внутри<div>
s также работает:источник
div = soup.find(id="articlebody")
soup.find('div', id='articlebody')
Чтобы найти элемент по его
id
:источник
Beautiful Soup 4 поддерживает большинство CSS-селекторов с помощью
.select()
метода , поэтому вы можете использовать такойid
селектор , как:Если вам нужно указать тип элемента, вы можете добавить селектор типа перед
id
селектором:.select()
Метод возвращает коллекцию элементов, а это означает , что она будет возвращать те же результаты, что и следующий.find_all()
метод , например:Если вы хотите выбрать только один элемент, вы можете просто использовать
.find()
метод :источник
Я думаю, что есть проблема, когда теги 'div' слишком сильно вложены. Я пытаюсь проанализировать некоторые контакты из html-файла facebook, и Beautifulsoup не может найти теги "div" с классом "fcontent".
Это происходит и с другими классами. Когда я ищу div в общем, получаются только те, которые не так много вложены.
Исходным кодом html может быть любая страница из Facebook списка друзей вашего друга (не одного из ваших друзей). Если кто-то может проверить это и дать совет, я был бы очень признателен.
Это мой код, где я просто пытаюсь напечатать количество тегов "div" с классом "fcontent":
источник
Скорее всего из-за проблем с парсером Beautifulsoup по умолчанию. Измените другой анализатор, например «lxml», и попробуйте снова.
источник
soup = BeautifulSoup(data, parser="html.parser")
В источнике Beautifulsoup эта строка позволяет вложить div в div; так что ваше беспокойство в комментарии Лукаса не будет обоснованным.
Я думаю, что вам нужно указать атрибуты, которые вы хотите, такие как
источник
ты пробовал
soup.findAll("div", {"id": "articlebody"})
?звучит безумно, но если вы скребете вещи с дикой природы, вы не можете исключить несколько делений ...
источник
Я использовал:
Как мой синтаксис для find / findall; тем не менее, если между тегом и списком атрибутов нет других необязательных параметров, это не должно быть иначе.
источник
Случилось и у меня тоже при попытке поцарапать гугл.
Я закончил тем, что использовал pyquery.
Установка:
Использование:
источник
Вот фрагмент кода
Как видите, я нахожу все теги, а затем нахожу все теги с class = "article" внутри
источник
Id
Свойство всегда однозначно определены. Это означает, что вы можете использовать его напрямую, даже не указав элемент. Поэтому, это положительный момент, если ваши элементы имеют его для анализа содержимого.источник