pyspider最易上手的初学教程
pyspider 是一个用python实现的功能强大的网络爬虫系统,能在浏览器界面上进行脚本的编写,功能的调度和爬取结果的实时查看,后端使用常用的数据库进行爬取结果的存储,还能定时设置任务与任务优先级等。
本篇文章只是对这个框架使用的大体介绍,更多详细信息可见官方文档。
安装
首先是环境的搭建,网上推荐的各种安装命令,如:
pip install pyspider
但是因为各种权限的问题,博主安装报错了,于是采用了更为简单粗暴的方式,直接把源码下下来run。
pyspider的源码地址,直接download或者git clone都行,下载完成后,进入文件夹目录。
系统默认用的Python是2.7版本,自己另外装了个3.4的,源码用python3跑起来。
先进行安装,在pyspider的路径下敲命令:
python3 setup.py install
一堆的打印,完了之后没什么错误提示就是安装完成了。
接下来跑起来:
python3 run.py
运行结果如下图所示
可以看到webui运行在5000端口处,在浏览器打开127.0.0.1:5000或者localhost:5000,便能看到框架的UI界面,如下图
这样pyspider就算是跑起来了。有的文章会提到需要安装phantomjs,这个暂时用不上,先忽略。
开始
拿这个网页来做例子:www.reeoo.com,爬取上面的数据。
新建任务
第一次跑起来的时候因为没有任务,界面的列表为空,右边有个Create按钮,点击新建任务。
- Project Name:任务的名字,可以任意填
- Start URL(s):爬取任务开始的地址,这里我们填目标网址的url
填写完成后,点击Create,便创建成功并跳转到了另一个界面,如下图所示
界面右边区域自动生成了初始默认的代码:
-
#!/usr/bin/env python
-
# -*- encoding: utf-8 -*-
-
# Created on 2016-11-02 09:27:35
-
# Project: reo
-
from pyspider.libs.base_handler import *
-
class Handler(BaseHandler):
-
crawl_config = {
-
}
-
@every(minutes=24 * 60)
-
def on_start(self):
-
self.crawl('http://www.reeoo.com', callback=self.index_page)
-
@config(age=10 * 24 * 60 * 60)
-
def index_page(self, response):
-
for each in response.doc('a[href^="http"]').items():
-
self.crawl(each.attr.href, callback=self.detail_page)
-
@config(priority=2)
-
def detail_page(self, response):
-
return {
-
"url": response.url,
-
"title": response.doc('title').text(),
-
}
-
on_start(self) 程序的入口,当点击左侧绿色区域右上角的 run 按钮时首先会调用这个函数
-
self.crawl(url, callback) pyspider库主要的API,用于创建一个爬取任务,url 为目标地址,这里为我们刚刚创建任务指定的起始地址,callback 为抓取到数据后的回调函数
-
index_page(self, response) 参数为 Response 对象,response.doc 为 pyquery 对象(具体使用可见pyquery官方文档),pyquery和jQuery类似,主要用来方便地抓取返回的html文档中对应标签的数据
-
detail_page(self, response) 返回一个 dict 对象作为结果,结果会自动保存到默认的 resultdb 中,也可以通过重载方法来讲结果数据存储到指定的数据库,后面会再提到具体的实现
其他一些参数
-
@every(minutes=24 * 60) 通知 scheduler(框架的模块) 每天运行一次
-
@config(age=10 * 24 * 60 * 60) 设置任务的有效期限,在这个期限内目标爬取的网页被认为不会进行修改
-
@config(priority=2) 设定任务优先级
Ps. 需要注意的一个地方,前面跑的 run.py 不是下载的源码文件夹中的,而是在 pyspider
文件夹中的 run.py,如下图,可以看到有两个 run.py 文件,虽然两个都能跑起来,但我们用到的是圈出来的那个,否则不能通过 –config 配置。
成功跑起来之后可以看到在当前文件夹中生成了一个 data
文件夹,生成的结果默认会保存到 result.db 中,爬取数据后可打开看里面保存了运行的结果。
运行
点击左边绿色区域右上角的 run 按钮,运行之后页面下册的 follows 按钮出现红色角标
选中 follows 按钮,看到 index_page 行,点击行右侧的运行按钮
运行完成后显示如下图,即 www.reeoo.com
页面上所有的url
此时我们可以任意选择一个结果运行,这时候调用的是 detail_page 方法,返回最终的结果。
结果为json格式的数据,这里我们保存的是网页的 title
和 url
,见左侧黑色的区域
回到主页面,此时看到任务列表显示了我们刚刚创建的任务,设置 status 为 running
,然后点击 Run 按钮执行
执行过程中可以看到整个过程的打印输出
执行完成后,点击 Results 按钮,进入到爬取结果的页面
右上方的按钮选择将结果数据保存成对应的格式,例如:JSON格式的数据为:
以上则为pyspider的基本使用方式。