【问题标题】:'unicode' object has no attribute 'prettify''unicode' 对象没有属性 'prettify'
【发布时间】:2016-12-26 00:41:49
【问题描述】:

我正在使用 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()

【问题讨论】:

    标签: python beautifulsoup prettify


    【解决方案1】:

    这是因为soup 在这些行之后不再是BeautifulSoupTag 实例:

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

    它变成了一个 unicode 字符串,当然,它没有 .prettify() 方法。

    根据您想要的输出,您应该能够使用.get_text().replace_with().unwrap().extract() 和其他BeautifulSoup 方法来清理您的 HTML,而不是尝试处理将其作为常规字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-28
      • 2015-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-25
      相关资源
      最近更新 更多