这是我写的代码。
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。任何帮助,将不胜感激。谢谢!
答案 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。