本页代码可以在这里下载。
pyspider简介:
pyspider架构主要分为Scheduler(调度器)、fetcher(抓取器)、Processer(处理器)三个部分,整个爬取过程受到Monitor(监控器)的监控,抓取的结果被Result Worker(结果处理器)处理。
Scheduler发起任务调度,Fetcher负责抓取网页的内容,Processer负责解析网页内容,然后将新生成的Request发给Scheduler进行调度,将生成的提取结果进行输出保存。
pyspider的使用:
首先启动pyspider,在控制台中输入 pyspider all
随后我们访问本地127.0.0.1:5000,发现pyspider已经启动完毕,这个界面就是用来管理项目、编写代码、在线调试、监控任务等。
点击右上角的create,创建项目。
其中,左边是代码的调试页面,右边是代码的编辑页面,这里的Handler就是pyspider的主类,我们可以在此定义爬取、解析、存储的逻辑。
接下来我们可以看到crawl_config属性,在这里我们可以将本项目的所有爬取配置统一定义到这里,如Headers、代理等,配置之后全局生效。
然后就是on_start(),爬虫的入口,初始的爬虫请求会在这里生成。
index_page() 方法接受Response,并对接了pyquery,我们直接调用doc()传入相应的CSS选择器就可以像pyquery一样解析页面,并生成新的请求。
detail_page() 和index_page()类似,只不过不再生成请求,解析之后将结果以字典的形式返回。
点击run,会发现下面会出来一个on_start()标注,下面请求部分也会出来一个数字1,代表当前有1个请求。
我们点击这个请求可以发现请求变成了232个,并输出了很多URL(因为右边调用的doc()传入了CSS选择器,选择出了所有的链接)。
同时点击下面html、web会出现对应的源码和网页。
显然,我们是不需要所有的链接的,如果我们替换doc里的选择器,我们可以筛选出需要的标题链接。
同时增加一部分,我们可以获取下一页的链接,这时候request变成11个。
现在,索引列表页的解析过程我们就完成了。
pyspider默认发送HTTP请求,但img节点不包括在HTML文档中,所以为了解决没有图片的问题,我们需要使用PhantomJS来解析图片,只要加个参数即可。
同时更改detail_page()页面中的规则,可以更改抓取的关键字。
保存并退回到主界面,更改状态为RUNNING
点击右侧RUN,开始运行。
点击Active Tasks 可以查看当前队列,哪些成功,哪些正在执行。
点击Result可以查看结果,可以点击右上角来以相应格式进行保存。
定时爬取:
为了实现定时爬取,我们可以再设置every属性来设置爬取的间隔时间,但是注意这个值不能少于任务的有效时间(@config(age=))
例如:
@every(minutes = 24*60) def on_start(self): self.crawl('http://demo.com', callback = self.index_page) @config(age = 10*24*60*60) def index_page(self): xxxx
这里,任务的过期时间是10天,而自动爬取的时间间隔为1天。
项目状态:
TODO:项目刚刚被创建还没被实现的状态。
STOP:如果想停止某项目的抓取,设置为STOP即可。
CHECKING:正在运行的项目被修改后会变成CHECKING状态,项目在中途出错需要被调整的时候会出现。
DEBUG/RUNNING:这两个状态对运行没有影响,设置成任何一个项目都可以运行,但是二者用来区分项目是否已经测试通过。
PAUSE:当爬取过程中出现多次错误时,项目会自动设置为改状态,并等待一定时间后继续爬取。
抓取进度:
在抓取时,会显示4个进度条。
其中5m 1h 1d 指的是最近5分钟、1小时、1天内的请求情况,all代表所有的请求。
蓝色代表任务等待被执行,绿色代表成功的任务,黄色代表请求失败后等待重试的任务,红色代表请求失败次过过多而被跳过的次数。
删除项目:
没有直接删除的选项,如果想要删除,将项目分组设置为delete,并设置为STOP,24小时后自动删除。
.
0 条评论