命令行输入pyspider开启pyspider
浏览器打开http://localhost:5000/
group表示组名,几个项目可以同一个组名,方便管理,当组名修改为delete时,项目会在一天后自动删除。
status表示项目的状态,TODO工作环境,STOP停用状态,DEBUG调试状态,RUNNING运行状态。当设置为RUNNING状态时,点击右边actions的Run按钮,程序就会跑起来。actions中的Results按钮点击之后,查看程序爬取的结果,如图:
点击右上角,可以以不同格式查看爬取信息,点击url可以查看每个url爬取的任务ID,结果等信息。如图:
点击项目名,进入代码界面:
看代码,
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# Created on 2019-03-24 13:51:31
# Project: demo
from pyspider.libs.base_handler import *
import datetime
class Handler(BaseHandler):
crawl_config = {
}
def __init__(self):
'''用户自定义,初始化变量'''
## 当前页码
self.page=1
## 通过观察网站,发现职位信息列表一共480页
self.totalpage=480
## 开始要爬取的网址
self.baseUrl="https://job.alibaba.com/zhaopin/positionList.htm#page/"
## every装饰器,每隔24*60分钟爬取一次,执行一次函数
@every(minutes=24 * 60)
def on_start(self):
while(self.page<=self.totalpage):
## validate_cert=False表示不验证证书,fetch_type='js'表示爬取js加载类型数据信息
self.crawl(self.baseUrl + str(self.page), callback=self.index_page,validate_cert=False,fetch_type='js')
self.page += 1
## age表示生命周期为10天
@config(age=10 * 24 * 60 * 60)
## 所有的返回信息都保存在response中
def index_page(self, response):
## 同pyquery解析爬到的网页源码,.items()返回爬取列表中所有结点数据
for each in response.doc('td > span > a').items():
## callback是回调函数,在执行完当前函数所有代码后再调用回调函数
self.crawl(each.attr.href, callback=self.detail_page,validate_cert=False)
## priority表示优先级,越大优先级越高,最大9999
@config(priority=2)
def detail_page(self, response):
## 获取当前抓取时间
now_data=datetime.datetime.now()
return {
"acquistion_time":now_data.__str__(),
"url": response.url,
"title": response.doc('title').text(),
"detail-content":response.doc('.detail-content').text()
}
然后看左边编辑器,
每次编辑好右边代码后点击右上角SAVE按钮保存,然后点击RUN,运行程序
follows表示当前执行回调函数on_start执行之后,有多少此回调index_page函数,传入参数self。点击follows,出现每一个index_page函数传入的self中的链接,对应链接右边的向右箭头,执行该index_page函数。
点击第一个index_page函数右边箭头之后,点击web按钮,显示index_page传入链接的网页如图,点击html按钮,是web网页对应的源码,点击follows如图,显示执行index_page回调函数后的结果,即列表页信息。
然后,在点击web按钮后,点击enable css selector helper按钮,选中web网页中对应职位标题,单击选中,然后点击左边窗体右上角的箭头,就会将对应选择结点的CSS选择器自动生成到右边代码编辑区鼠标定位处。
继续回来,点击follows,然后点击detail_page回调函数右边的箭头执行每个detail_page回调函数,则爬取了detail_page返回的内容,即详情页信息,每个职位的详细信息。
messages按钮表示右边代码中return的信息,及控制台提示信息、报错信息等。