浅谈如何提取 WordPress eXtended RSS (WXR) 中的信息

啊,然后我又很久没写博客了。明天要上班鸟,毕竟是第一份正儿八经全职工作,还是有点紧张外加期待的。这篇文也是拖了好久没写了,主要是在我分析完我的推特数据以后突然发现,我使用 WordPress based 的博客也有七年了(记录可以一直追溯到09年——再之前我也有用过yo2之类的 WP托管型博客,但是貌似我没有导出记录)。就突然心血来潮想看一下词云。(我知道WP有能提供词云的插件 ><)但托管在 WordPress.com 的博客有那么一点不一样,导出的数据格式不是普通的XML,而是WXR (WordPress eXtended RSS)。跟推特很好心的在打包的 zip file 里给你提供好 .csv 文件不一样,WordPress.com 的导出记录用文本编辑器打开来看就是长得很丑的……XML。所以就简单说下怎么提取数据啦。

一开始我想直接用 Python 里自带的 xml 包来 parse 文档,最后读是能读出来。。。但是根本不是我想要的OTZ。先上个原文件在文本编辑器里的截图好了(扩展名是 .xml 打开来看也还是蛮像回事的。。。)

051516-1

(其他文章都太长了所以选个短点的截图)

可见要提取的就是 <content:encoded> 和 </content:encoded> 之间的内容,但是用 XML 包无法暴力提取出来。当时感觉有些绝望,还以为要自己写个包了(我能力不至于此)。结果搜到了此等好物:wxr_parser 专为提取WXR文档中的信息设计,都打包的很妥帖:

import wxr_parser

# parse a file
parsed_data = wxr_parser.parse('path_to_your_wxr.xml')

如果只想抓取所有的博文主体(无视评论、发表时间等无关信息),只需要 call parsed_data[‘post’][INDEX][‘content’] 就好了,很方便。但因为博文主体都是 HTML encoded 的,所以还要再安装一个 HTMLParser 包,把 HTML strings 转成 UTF-8 encoded 字符。转完后会残留 html tag,我试着用网上搜到的 regex 清理了一下,但还是不能把所有无关的 html tag 都去掉(<>这种没问题,但有些类似 的没法把中括号消除)。因为我不在乎保留大块的文章段落(反正最后也还是要分词),所以就还是先放到了列表里。关键步骤如下:

import wxr_parser
import HTMLParser

# parse a WXR file
wp = wxr_parser.parse(ADDR_TO_YOUR_WXR_XML_FILE)

# attempts to extract the content - HTML character entities found
# wp['posts'][1]['content']

# use html parser to decode the strings
h = HTMLParser.HTMLParser()

# append it to a list
# to strip html tag: see here http://stackoverflow.com/questions/3662142/how-to-remove-tags-from-a-string-in-python-using-regular-expressions-not-in-ht
# using regex
# TO SOLVE: REMOVE STH LIKE 
ori_post = []
for index in range(len(wp['posts'])):
    tag_free = re.sub('<[^>]*>', '', h.unescape(wp['posts'][index]['content']))
    ori_post.append(tag_free)

手工去除无关符号等代码见上一篇 post,最后出来的结果让我误以为我是个诗人:

041016

词云也是顺理成章了:

wordcloud.png

所以过去的自己就是喜欢碎碎念的文学少女风嘛(摔)!

其实我也不知道为啥要写这篇更新,本来还想继续挖掘文本的,但后来我 document to term matrix
总是弄不出来所以就不想弄了(死目)。如果不拖延的话,我大概还能继续分析下这几年的语言规律吧(其实不是说每个人都有自己特定的语言风格么见文如见人)。恩就先这样。。。下一篇更新不知道拖到什么时候了,说好的 kaggle challenges 我也总是找借口不做(。如果上班后有时间的话是时候做点 quantitative analysis 了(卖保险之外的娱乐……?)~

最后废话几句:五月已经过去一半了!希望大家不要被五月病折磨!

还有今天是我购入骚红君满两周年的日子!(什么鬼)以后也请多多关照(((

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s