2016-12-26 6 views
2

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

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

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() 

ответ

2

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

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

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

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