Nano Hash - криптовалюты, майнинг, программирование

Проблема с удалением html-тегов при использовании Beautiful Soup

Я использую красивый суп, чтобы очистить некоторые данные с веб-сайта, но я не могу удалить теги html из данных при их печати. Ссылочный код:

import csv
import urllib2
import sys  
from bs4 import BeautifulSoup

page = urllib2.urlopen('http://www.att.com/shop/wireless/devices/smartphones.html').read()
soup = BeautifulSoup(page)
soup.prettify()
for anchor1 in soup.findAll('div', {"class": "listGrid-price"}):
    print anchor1
for anchor2 in soup.findAll('div', {"class": "gridPrice"}):
    print anchor2
for anchor3 in soup.findAll('div', {"class": "gridMultiDevicePrice"}):
    print anchor3

Вывод, который я получаю, выглядит следующим образом:

<div class="listGrid-price"> 
                                $99.99 
            </div>
<div class="listGrid-price"> 
                                $0.01 
            </div>
<div class="listGrid-price"> 
                                $0.01 
            </div>

Я хочу, чтобы на выходе были только цены без каких-либо html-тегов. Простите меня за мое невежество, так как я новичок в программировании.


Ответы:


1

Вы печатаете найденный тег. Чтобы напечатать только содержащийся текст, используйте атрибут .string:

print anchor1.string

Значение .string представляет собой NavigableString экземпляр; чтобы использовать его как обычный объект Unicode, сначала преобразуйте его. Затем вы можете использовать strip() для удаления лишних пробелов:

print unicode(anchor1.string).strip()

Немного изменив это, чтобы учесть пустые значения:

for anchor1 in soup.findAll('div', {"class": "listGrid-price"}):
    if anchor1.string:
        print unicode(anchor1.string).strip()

что дает мне:

$99.99
$0.99
$0.99
$299.99
$199.99
$49.99
$49.99
$99.99
$0.99
$99.99
$0.01
$0.01
$0.01
$0.01
$0.01
19.12.2012
  • Ранее я пытался использовать anchor1.string, но это выдавало эту ошибку: RuntimeError: превышена максимальная глубина рекурсии. После этого я также попытался изменить предел рекурсии с 1000 до 1500, но даже тогда это не сработало. 19.12.2012
  • @ user1915050: тогда задайте этот вопрос вместе с трассировкой. В таком случае anchor1, вероятно, не то, что вы думаете. 19.12.2012
  • @ user1915050: Я только что попробовал ваш код с anchor1.string, и он работает, как и ожидалось. 19.12.2012
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..