python 类似wordpress_用Python爬取WordPress官网所有插件

转自丘壑博客,转载注明出处

前言

只要是用WordPress的人或多或少都会装几个https://wordpress.org/plugins/上列出了一共有 54,520 个插件。记得以前在官网上可以按各种分类浏览的,现在只有推荐的插件、收藏的插件、流行的插件几大类显示出来,其他的好像只能靠人肉搜索了。其实挺不方便的。

那么首先第一步我们要知道取哪里可以找到所有的WordPress插件列表,搜了一圈发现WordPress的svn上有这个完整的列表, http://plugins.svn.wordpress.org/(这个网页比较大,5M多,慎点),比官网上的还要齐全,一共7万多个。有了完整列表就好办了。

接下来就是要获取的是插件的各种信息,比如作者、下载量、评分等等。这个可以去哪里获取呢?当然最傻的办法就是根据上面列表中的插件地址,把每个插件的网页down下来再提取,这也就是爬虫干的事。不过 WordPress.org 网站自身的a href="https://codex.wordpress.org/WordPress.org_API"> WordPress.org API 已经给开发者提供了非常方便强大的接口,可以获取到几乎所有 wordprss.org 上的主题、插件、新闻等相关的信息,也支持各种参数和查询。注意,这个和WordPress的REST API是两回事。基本上你可以理解成 Apple.com 的 API 和 iOS 的 API 之间的区别(虽然apple.com并没有什么API。。。)

比如本次需要插件的一些数据,那就可以使用关于插件描述的 API, https://api.wordpress.org/plugins/info/1.0/{slug}.json,slug也就是每个插件唯一的地址,这个在刚才svn上已经可以获取到了。用这个 API 可以返回关于插件的 json 格式的各种详细信息,很全面,如下:

有了列表,有了返回格式,接下来就是要把这些信息给扒下来,其实就是重复遍历一遍就可以了,要么用著名 Python 的 .

"versions": { "0.1": "https://downloads.wordpress.org/plugin/0-errors.0.1.zip", "0.2": "https://downloads.wordpress.org/plugin/0-errors.0.2.zip", "trunk": "https://downloads.wordpress.org/plugin/0-errors.zip" },

InvalidDocument: key must not contain ‘.’

不用就不用呗。。。改key才蛋疼了。所以这可以祭出另外一个厉害的python库 http://plugins.svn.wordpress.org/ ,这网页是一个非常简单的静态网页,就是一个巨大的ul列表,每一个li就是一个

这里的href就是http://wordpress.org用来确定

作为对比,可以看下用 BeautifulSoup 的方法:

就这么一个简单对比还是比较明显的,简单明了。最终,这一步的输出结果就是这个all_plugins_urls.txt文件了,总共有79223个

├── scrap_wp_plugins

│ ├── __init__.py

│ ├── __pycache__

│ ├── items.py

│ ├── middlewares.py

│ ├── pipelines.py

│ ├── settings.py

│ └── spiders

│ ├── __init__.py

│ └── __pycache__

└── scrapy.cfg

4 directories, 7 files

对我们这个需求来说,除了settings.py需要做一点点修改,其余文件都先不用管它,在这个简单的不能再简单的项目里都用不到。

目前只是一个空架子,啥也干不了,因为还没有爬虫文件,你可以完全纯手写,也可以用模板来生成一个。我们就用scrapy的命令行自动生成一个爬虫,语法格式是这样:

Syntax: scrapy genspider [-t template]

template 是要使用的爬虫的模板,默认的就是用最基本的一个。

name 就是爬虫的名字,这个可以随便取,等下要开始爬的时候会用到这个名字。好比给你的小蜘蛛取名叫“春十三”,那么在召唤它的时候你就可以大喊一声:“上吧!我的春十三!”

domain 是爬虫运行时允许的域名,好比说:“上吧!我的春十三!只沿着这条路线上!”

所以执行如下命令即可:

cd scrap_wp_plugins scrapy genspider plugins_spider http://wordpress.org

这样就会在spiders文件夹下生出一个叫plugins_spider.py的爬虫文件,也就是在这里面可以填充一些爬取逻辑和内容解析。

制作爬虫(Spider):制作爬虫开始爬取网页

首先我们打开scrap_wp_plugins/plugins_spider.py看下里面的内容:

可以看出这就是一个最简单scrapy的Spider的类而已,自动填入了上一步用来创建爬虫时的一些参数。

name:爬虫的识别名,它必须是唯一的,在不同的爬虫中你必须定义不同的名字,就是上一步的命令行里写的plugins_spider.

start_urls:爬虫开始爬的一个URL列表。爬虫从这里开始抓取数据,所以,第一次下载的数据将会从这些URLS开始。其他URL将会从这些起始URL中继承性生成。具体来说,在准备工作那一部分,我们已经得到了一个urls的列表文件all_plugins_urls.txt,现在只需要把这个文件读取进来就好了。

parse():爬虫的方法,调用时候传入从每一个URL传回的Response对象作为参数,response将会是parse方法的唯一的一个参数,

这个方法负责解析返回的数据、匹配抓取的数据(解析为item)并跟踪更多的URL。在本项目中,因为返回的是json,不需要解析任何html,这里为了省事我就直接把json整个存储起来已备后面数据分析的时候再选择需要的字段,当然你也可以根据需要选择过滤掉不需要的json字段。

所以,我们的第一个爬虫就呼之欲出了!请看代码,麻雀虽小五脏俱全

运行爬虫

改完上面的爬虫代码,现在就可以让爬虫跑起来了,“上吧!比卡丘!”

scrapy crawl plugins_spider

哦嚯。。。

意外发生了。。。啥也没爬下来??Don’t Panic !别慌,仔细看下报错信息,原来是 https://api.wordpress.org/robots.txt规定了不允许爬虫,而scrapy默认设置里是遵守robot协议的,所以简单绕过就行了,打开 setttings.py, 找到下面这行,把True改为False,意思是:“爱咋咋地,老子不屌你的robots.txt ”

# Obey robots.txt rules ROBOTSTXT_OBEY = True

再次运行现在就可以愉快的爬取了。还有一点温馨提示,如果爬取网址数量比较多,不想中途因为断网或者其他什么鬼知道的意外中断,导致下次又要重新来过,可以加上scrapy的执行日志来保存爬虫状态,下次就会从中断处开始继续爬取

scrapy crawl plugins_spider -s JOBDIR=spiderlog --logfile log.out &

这样就可以安心的去睡个觉,一早起来就能看到热呼呼新鲜出路的WordPress所有的插件信息了。

未完待续

本想放在一篇写的,没想到光爬信息这点东西写了这么多写到这么晚。。。。可能东拉西扯废话太多了,下一篇继续再写关于数据分析的科普文吧。

用Python爬取WordPress官网所有插件 - 丘壑博客​bestscreenshot.comv2-e1bcbc5f642827d06c0cd342375abbe9_180x120.jpg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值