Объект 'unicode' не имеет атрибута 'prettify'

Я использую BeautifulSoup для анализа html-статьи. Я использую некоторые функции для очистки html, поэтому могу оставить только основную статью.

Кроме того, я хочу сохранить вывод супа в файл. Ошибка, которую я получаю, следующая:

soup = soup.prettify("utf-8")
AttributeError: 'unicode' object has no attribute 'prettify'

Исходный код:

#!/usr/bin/env python
import urllib2
from bs4 import BeautifulSoup
import nltk
import argparse

def cleaner():
    url = "https://www.ceid.upatras.gr/en/announcements/job-offers/full-stack-web-developer-papergo"
    ourUrl  = urllib2.urlopen(url).read()
    soup = BeautifulSoup(ourUrl)

    #remove scripts
    for script in soup.find_all('script'):
        script.extract()
    soup = soup.find("div", class_="clearfix")

    #below code will delete tags except /br
    soup = soup.encode('utf-8')
    soup = soup.replace('<br/>' , '^')
    soup = BeautifulSoup(soup)
    soup = (soup.get_text())
    soup=soup.replace('^' , '<br/>')

    print soup
    with open('out.txt','w',encoding='utf-8-sig') as f:
        f.write(soup.prettify())

if __name__ == '__main__':
    cleaner()

person photeesh    schedule 26.12.2016    source источник


Ответы (1)


Это потому, что soup больше не является экземпляром BeautifulSoup или Tag после этих строк:

soup = (soup.get_text())
soup = soup.replace('^' , '<br/>')

Это становится строкой юникода, которая, конечно же, не имеет метода .prettify().

В зависимости от желаемого результата вы сможете использовать .get_text(), .replace_with(), .unwrap(), .extract() и другие BeautifulSoup методы очистки вашего HTML вместо того, чтобы пытаться разобраться с ним как с обычной строкой.

person alecxe    schedule 26.12.2016