如何使用BeautifulSoup用随机文本替换HTML文档的内容?

时间:2016-08-30 10:40:11

标签: python html python-2.7 beautifulsoup

这是我写的代码。

    from bs4 import BeautifulSoup
import urllib
import string, random

def readHtml():
    sock = urllib.urlopen('1041956_Page1.htm')
    soup = BeautifulSoup(sock,'html.parser')
    paraTags = soup.find_all('p')
    for para in paraTags:
        if(para.get_text() is not None):
            para.replace_with(randomizeText(para.get_text())


def randomizeText(text):
    length = len(text)
    newWord = ''.join(random.choice(string.lowercase) for x in range(length-1))
    return newWord

if __name__ == "__main__":
    readHtml()

这给我一个错误,说

  

ValueError:无法在标记中插入None。

我希望用随机文本替换BeautifulSoup对象,以便从中重建html。任何帮助,将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:1)

您的randomizeText()并未返回任何内容,即None。 成功:

def randomizeText(text):
    length = len(text)
    newWord = ''.join(random.choice(string.lowercase) for x in range(length))
    print newWord
    return newWord

replace_with限制用None替换文字。

同时更改第10行:

para.string.replace_with(randomizeText(para.get_text()))

para.replace_with(randomizeText(para.get_text()))

要避免 - AttributeError:' NoneType'对象没有属性' replace_with'

我的上述评论

  

你的代码似乎很好 - 你可能因为空的而得到这个   p阻止

无效,因为我检查了空p块的长度是1。

答案 1 :(得分:0)

我不确定,但你考虑了

的情况
<p></p>

是空的。

所以,

para.get_text() 

将返回None。