知识分享:PySpider框架API开发记录

技巧分享 开源项目 技巧 分享

参照PySpider官方网站上http://docs.pyspider.org给出的框架api开发文档进行翻译,再此记录分享一下,便于后期更方便的使用pyspider。

self.crawl

self.crawl(url, **kwargs)

self.crawl pyspider 主要的API,用于创建一个爬取任务,url 为目标地址。

参数

必选参数

  • url: 抓取的目标地址
  • callback: 回调函数,默认__call__
def on_start(self):
    self.crawl(url='http://scrapy.org/', callback=self.index_page)

可选参数

  • age: 设置任务的有效期,以秒为单位,在有效期内,该页面被爬虫视为未修改状态,忽略抓取。默认值为-1:永久不会重新爬取,页面永久有效
@config(age=10 * 24 * 60 * 60) # 这里表示有效期为10天,即10天内不会再次爬取页面
def index_page(self, response):
    ...
  • priority: 设置爬取优先级,数字越大优先级越大,默认为0。可以用这个来先做宽度搜索BFS并减少队列中的任务数(这可能会花费更多的内存资源)
def index_page(self):
    self.crawl('http://www.example.org/page2.html', callback=self.index_page)
    self.crawl('http://www.example.org/233.html', callback=self.detail_page, priority=1)
    #这里表示233.html页面会比page2.html优先爬取
  • exetime:设置Unix时间戳中任务的执行时间,默认为0(立即执行)
import time
def on_start(self):
    self.crawl('http://www.example.org/', callback=self.callback, exetime=time.time()+30*60)
    # 这里表示此页面将在30分钟之后再执行爬取
  • retries: 失败重试次数,默认:3
  • itag: 任务标记值,此标记会在抓取时对比,如果这个值发生改变,不管有效期有没有到都会重新抓取新内容.多数用来动态判断内容是否修改或强制重爬.默认值是:None
def index_page(self, response):
    for item in response.doc('.item').items():
        self.crawl(item.find('a').attr.url, callback=self.detail_page, itag=item.find('.update-time').text()) 
        # 这里表示update-time字段值改变,则无论有效期多少,都会重新爬取

如果你想重新爬取所有任务,你可以通过在Handler.crawl_config 设置itag值来重新设置新的版本号

class Handler(BaseHandler):
    crawl_config = {
        'itag': 'v223'
    }

在你修改脚本后更改itag的值,然后再点run按钮,就会重新爬取,即使以前没设定itag也不影响。

。。。回家继续更新。。。

参考:
http://docs.pyspider.org/en/latest/apis/

新评论

称呼不能为空
邮箱格式不合法
网站格式不合法
内容不能为空