将 WordPress 帖子转换为 CSV 格式

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 63w+ 字,讲解图 2808+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2200+ 小伙伴加入学习 ,欢迎点击围观

周末我想查看这个博客背后的 WordPress 数据(非常元!)并希望以 CSV 格式获取数据,以便我可以在 R 中进行一些分析。

我找到了几个 WordPress CSV 插件,但遗憾的是我无法使用它们中的任何一个,最终只能使用 WordPress 在“导出”博客时生成的原始 XML 数据。

我遇到了 导出不完整的 问题,我通过在几年的两个部分中分别导入帖子来“解决”了这个问题。

然后我花了好几个小时努力使用 R 的 rvest 库来整理数据,但最终决定使用 Python 的 beautifulsoup 进行抓取并将其保存到 CSV 文件中以便在 R 中进行分析。

我们要提取的 XML 的结构如下:


 <rss version="2.0"
xmlns:excerpt="http://wordpress.org/export/1.2/excerpt/"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:wp="http://wordpress.org/export/1.2/"
>
...
    <channel>
<item>
<title>First thoughts on Ruby...</title>
<link>http://www.markhneedham.com/blog/2006/08/29/first-thoughts-on-ruby/</link>
<pubDate>Tue, 29 Aug 2006 13:31:05 +0000</pubDate>
...

我编写了以下脚本来解析文件:


 <rss version="2.0"
xmlns:excerpt="http://wordpress.org/export/1.2/excerpt/"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:wp="http://wordpress.org/export/1.2/"
>
...
    <channel>
<item>
<title>First thoughts on Ruby...</title>
<link>http://www.markhneedham.com/blog/2006/08/29/first-thoughts-on-ruby/</link>
<pubDate>Tue, 29 Aug 2006 13:31:05 +0000</pubDate>
...

我们最终得到一个如下所示的 CSV 文件:


 <rss version="2.0"
xmlns:excerpt="http://wordpress.org/export/1.2/excerpt/"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:wp="http://wordpress.org/export/1.2/"
>
...
    <channel>
<item>
<title>First thoughts on Ruby...</title>
<link>http://www.markhneedham.com/blog/2006/08/29/first-thoughts-on-ruby/</link>
<pubDate>Tue, 29 Aug 2006 13:31:05 +0000</pubDate>
...

让我们快速查看 R 中的数据并检查它是否正确导出:


 <rss version="2.0"
xmlns:excerpt="http://wordpress.org/export/1.2/excerpt/"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:wp="http://wordpress.org/export/1.2/"
>
...
    <channel>
<item>
<title>First thoughts on Ruby...</title>
<link>http://www.markhneedham.com/blog/2006/08/29/first-thoughts-on-ruby/</link>
<pubDate>Tue, 29 Aug 2006 13:31:05 +0000</pubDate>
...

所以我们导出了 1501 个帖子。让我们交叉检查 WordPress 仪表板:

我们获得了两个额外的职位!对 WordPress 仪表板的更多探索表明实际上有 2 个草稿帖子。

我们可能想从导出中删除那些,幸运的是我们可以检查每个帖子的“状态”标签。我们要确保它没有值“草稿”:


 <rss version="2.0"
xmlns:excerpt="http://wordpress.org/export/1.2/excerpt/"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:wp="http://wordpress.org/export/1.2/"
>
...
    <channel>
<item>
<title>First thoughts on Ruby...</title>
<link>http://www.markhneedham.com/blog/2006/08/29/first-thoughts-on-ruby/</link>
<pubDate>Tue, 29 Aug 2006 13:31:05 +0000</pubDate>
...

我还必须检查该标签是否确实存在,因为有一些帖子没有它但已经发布了。如果我们在 R 中检查生成的 CSV 文件,我们可以看到我们现在已经获得了所有帖子:


 <rss version="2.0"
xmlns:excerpt="http://wordpress.org/export/1.2/excerpt/"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:wp="http://wordpress.org/export/1.2/"
>
...
    <channel>
<item>
<title>First thoughts on Ruby...</title>
<link>http://www.markhneedham.com/blog/2006/08/29/first-thoughts-on-ruby/</link>
<pubDate>Tue, 29 Aug 2006 13:31:05 +0000</pubDate>
...

现在我们已准备好检验我的几个假设,但那是另一篇文章的内容了!

相关文章