去除Discuz!论坛生成的乱码

这几天在写「计算网络心理学」这门高大上的神课的大作业:用python写个爬虫爬老师指定的几个论坛。

写的时候发现论坛的帖子的内容中会随机的插有乱码。这倒也不是新鲜事了,原来我一直不知道是干嘛用的。google一下发现好像是为了防止复制党的。

举个例子,随便摘了一个贴子某一层楼的内容。

<font class="jammer">( `) R4 V, C&nbsp;&nbsp;{7 r0 B, R7 R</font><br />
<strong><font size="4"><font color="#0000ff">怎么就“故意篡改”了?</font></font><font size="6"><font color="#ff0000">您的智商不会有问题吧?</font></font></strong><br />
<span style="display:none">$ C$ ]( {, {% x% </span><strong><font size="6"><font color="#ff0000"><br />
<span style="display:none">& j( E- D6 e3 Y; O</span></font></font></strong><font class="jammer">: q, J; Z. y5 r2 v&nbsp;&nbsp;t* t</font><br />
<img src="static/image/smiley/new1/em58.gif" smilieid="192" border="0" alt="" /><br />
<span style="display:none">$ q- d0 @4 K4 z* P+ y4 |) h- ?</span><br />
<span style="display:none">3 p5 h; g% z; g, e7 n) E</span><font class="jammer">% Y8 }1 s/ `) a9 P# j- S! x</font><br />
<br />
<span style="display:none">- R: a$ t&nbsp;&nbsp;F- A7 o! R# L; l</span><strong><font size="3"><font color="#0000ff">你自己当时的帖子,是直接对我的帖子进行回复的,也就是说,是引用了我的内容的,是一样的吧?如果事后改了,那就不一样了。</font></font></strong><font class="jammer">; C; h# C8 Z) W5 c% d4 @</font><br />
<font class="jammer">" h8 _+ e&nbsp;&nbsp;|+ {3 X</font><br />
<font color="#ff0000"><strong>你自己,在几乎同一年月注册了几个马甲账号?还口口声声说别人?</strong></font><br />

可以看出来有很多有规则的乱码,一般都是一个字符,加若干个字符乘2+空格,然后再以一个字符结尾。不过discuz!还是挺厚道的留了个jammer的属性,所以说用正则去掉这些乱码还是挺简单的。

# delete jammers
post_text = re.sub(r'<font class="jammer"[sS]*?/font>|<span style="display:none"[sS]*?/span>', "", post_text)
# delete accessory
post_text = re.sub(r'<ignore_js_op[sS]*?/ignore_js_op>', "", post_text)
# delete updating info
post_text = re.sub(r'<i class="pstatus"[sS]*?/i>', "", post_text)
# delete quote
post_text = re.sub(r'<div[sS]*?/div>', "", post_text)
# delete emoji
post_text = re.sub(r'<img.*?>', "", post_text)
# delete font label, strong label and td label
post_text = re.sub(r'</?strong.*?>|</?font.*?>|</?td.*?>', "", post_text)
# delete n & s in text
post_text = re.sub(r's|<br/>', "", post_text)

总体来说还是挺傻瓜且直观的,从几个测试的贴子的表现来看,效果还不错。不过由于贴子内容的html label可能不止这些,可能删除不干净,另外这门课主要还是关注于用户的发言中的词语之类的,对于数据表格之类的并不是很关注。所以这么处理效果还不错。

如果需要保留表格啊,附件啊,图像啊之类的,应该还需要再具体修改。